@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
@@ -10,5 +10,5 @@
10
10
  /**
11
11
  * this is the version of this package, auto-updated in the build process
12
12
  */
13
- export declare const AUTO_GENERATED_VERSION = "0.0.58";
13
+ export declare const AUTO_GENERATED_VERSION = "0.0.60";
14
14
  //# sourceMappingURL=AUTO-GENERATED-version.d.mts.map
@@ -10,5 +10,5 @@
10
10
  /**
11
11
  * this is the version of this package, auto-updated in the build process
12
12
  */
13
- export const AUTO_GENERATED_VERSION = '0.0.58';
13
+ export const AUTO_GENERATED_VERSION = '0.0.60';
14
14
  //# sourceMappingURL=AUTO-GENERATED-version.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"custodian-delegate-helper.d.mts","sourceRoot":"","sources":["../../src/identity/custodian-delegate-helper.mts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;;;;GAKG;AACH,wBAAsB,kCAAkC,CAAC,EACrD,cAAc,GACjB,EAAE;IACC,cAAc,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC,MAAM,CAAC,CA0BlB;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAAC,EAC9C,cAAc,GACjB,EAAE;IACC,cAAc,EAAE,MAAM,CAAC;CAC1B,GAAG,IAAI,CAIP"}
1
+ {"version":3,"file":"custodian-delegate-helper.d.mts","sourceRoot":"","sources":["../../src/identity/custodian-delegate-helper.mts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH;;;;;GAKG;AACH,wBAAsB,kCAAkC,CAAC,EACrD,cAAc,GACjB,EAAE;IACC,cAAc,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC,MAAM,CAAC,CAiDlB;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAAC,EAC9C,cAAc,GACjB,EAAE;IACC,cAAc,EAAE,MAAM,CAAC;CAC1B,GAAG,IAAI,CAIP"}
@@ -5,6 +5,8 @@
5
5
  * for full-custodian / passwordless identities.
6
6
  */
7
7
  import { getUUID, hash, HashAlgorithm, extractErrorMsg } from "@ibgib/helper-gib/dist/helpers/utils-helper.mjs";
8
+ import { storageGet, storagePut } from "../storage/storage-helpers.web.mjs";
9
+ import { getGlobalDbName, getGlobalStoreName } from "../helpers.web.mjs";
8
10
  const LOCAL_STORAGE_PREFIX = 'ibgib_custodian_delegate_secret_';
9
11
  /**
10
12
  * Retrieves or generates a high-entropy local delegate secret for a passwordless custodian identity.
@@ -19,18 +21,33 @@ export async function deriveLocalCustodianDelegateSecret({ primaryTjpAddr, }) {
19
21
  throw new Error('primaryTjpAddr is required to derive local custodian delegate secret (E: a1b2c3d4e5f67890123456789a000101)');
20
22
  }
21
23
  const key = `${LOCAL_STORAGE_PREFIX}${primaryTjpAddr}`;
22
- const existingSecret = localStorage.getItem(key);
24
+ const dbName = getGlobalDbName();
25
+ const storeName = getGlobalStoreName();
26
+ // debugger; // what are the dbName and storeName?
27
+ const existingSecret = await storageGet({ dbName, storeName, key });
23
28
  if (existingSecret) {
24
29
  return existingSecret;
25
30
  }
26
31
  // Generate high-entropy 512-bit SHA hash secret from fresh UUIDs
27
- const rawEntropy = `${await getUUID()}-${await getUUID()}-${await getUUID()}-${Date.now()}`;
32
+ const rawEntropy = await getUUID(32);
28
33
  const newSecret = await hash({
29
34
  s: rawEntropy,
30
35
  algorithm: HashAlgorithm.sha_512
31
36
  });
32
- localStorage.setItem(key, newSecret);
37
+ await storagePut({ dbName, storeName, key, value: newSecret });
33
38
  return newSecret;
39
+ // const existingSecret = localStorage.getItem(key);
40
+ // if (existingSecret) {
41
+ // return existingSecret;
42
+ // }
43
+ // // Generate high-entropy 512-bit SHA hash secret from fresh UUIDs
44
+ // const rawEntropy = `${await getUUID()}-${await getUUID()}-${await getUUID()}-${Date.now()}`;
45
+ // const newSecret = await hash({
46
+ // s: rawEntropy,
47
+ // algorithm: HashAlgorithm.sha_512
48
+ // });
49
+ // localStorage.setItem(key, newSecret);
50
+ // return newSecret;
34
51
  }
35
52
  catch (error) {
36
53
  console.error(`${lc} ${extractErrorMsg(error)}`);
@@ -1 +1 @@
1
- {"version":3,"file":"custodian-delegate-helper.mjs","sourceRoot":"","sources":["../../src/identity/custodian-delegate-helper.mts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,iDAAiD,CAAC;AAEhH,MAAM,oBAAoB,GAAG,kCAAkC,CAAC;AAEhE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kCAAkC,CAAC,EACrD,cAAc,GAGjB;IACG,MAAM,EAAE,GAAG,IAAI,kCAAkC,CAAC,IAAI,GAAG,CAAC;IAC1D,IAAI,CAAC;QACD,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,4GAA4G,CAAC,CAAC;QAClI,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,oBAAoB,GAAG,cAAc,EAAE,CAAC;QACvD,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,cAAc,EAAE,CAAC;YACjB,OAAO,cAAc,CAAC;QAC1B,CAAC;QAED,iEAAiE;QACjE,MAAM,UAAU,GAAG,GAAG,MAAM,OAAO,EAAE,IAAI,MAAM,OAAO,EAAE,IAAI,MAAM,OAAO,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAC5F,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC;YACzB,CAAC,EAAE,UAAU;YACb,SAAS,EAAE,aAAa,CAAC,OAAO;SACnC,CAAC,CAAC;QAEH,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACrC,OAAO,SAAS,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjD,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iCAAiC,CAAC,EAC9C,cAAc,GAGjB;IACG,IAAI,CAAC,cAAc,EAAE,CAAC;QAAC,OAAO;IAAC,CAAC;IAChC,MAAM,GAAG,GAAG,GAAG,oBAAoB,GAAG,cAAc,EAAE,CAAC;IACvD,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"custodian-delegate-helper.mjs","sourceRoot":"","sources":["../../src/identity/custodian-delegate-helper.mts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,iDAAiD,CAAC;AAChH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEzE,MAAM,oBAAoB,GAAG,kCAAkC,CAAC;AAEhE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kCAAkC,CAAC,EACrD,cAAc,GAGjB;IACG,MAAM,EAAE,GAAG,IAAI,kCAAkC,CAAC,IAAI,GAAG,CAAC;IAC1D,IAAI,CAAC;QACD,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,4GAA4G,CAAC,CAAC;QAClI,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,oBAAoB,GAAG,cAAc,EAAE,CAAC;QAEvD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;QAEvC,kDAAkD;QAGlD,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QACpE,IAAI,cAAc,EAAE,CAAC;YACjB,OAAO,cAAc,CAAC;QAC1B,CAAC;QAED,iEAAiE;QACjE,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC;YACzB,CAAC,EAAE,UAAU;YACb,SAAS,EAAE,aAAa,CAAC,OAAO;SACnC,CAAC,CAAC;QACH,MAAM,UAAU,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAE/D,OAAO,SAAS,CAAC;QAGjB,oDAAoD;QACpD,wBAAwB;QACxB,6BAA6B;QAC7B,IAAI;QAEJ,oEAAoE;QACpE,+FAA+F;QAC/F,iCAAiC;QACjC,qBAAqB;QACrB,uCAAuC;QACvC,MAAM;QAEN,wCAAwC;QACxC,oBAAoB;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjD,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iCAAiC,CAAC,EAC9C,cAAc,GAGjB;IACG,IAAI,CAAC,cAAc,EAAE,CAAC;QAAC,OAAO;IAAC,CAAC;IAChC,MAAM,GAAG,GAAG,GAAG,oBAAoB,GAAG,cAAc,EAAE,CAAC;IACvD,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACjC,CAAC"}
@@ -56,8 +56,8 @@ export const IDENTITY_POOL_ID_APP_AUTHORIZE = 'identity-app-authorize';
56
56
  export const IDENTITY_POOL_ID_APP_EPOCH = 'identity-app-epoch';
57
57
  // ===========================================================================
58
58
  // KDF SALTS
59
- // Used to derive tier-specific MasterSecrets from a root passphrase.
60
- // Different salt per tier ensures independent secrets even with same passphrase.
59
+ // Used to derive tier-specific MasterSecrets from a root password.
60
+ // Different salt per tier ensures independent secrets even with same password.
61
61
  // ===========================================================================
62
62
  export const IDENTITY_KDF_SALT_META = 'ibgib-identity-meta-v1';
63
63
  export const IDENTITY_KDF_SALT_LOCAL = 'ibgib-identity-local-v1';
@@ -1 +1 @@
1
- {"version":3,"file":"identity-constants.mjs","sourceRoot":"","sources":["../../src/identity/identity-constants.mts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAC9E,4EAA4E;AAC5E,8EAA8E;AAE9E,6DAA6D;AAC7D,MAAM,CAAC,MAAM,wBAAwB,GAAG,qBAAqB,CAAC;AAC9D,kEAAkE;AAClE,MAAM,CAAC,MAAM,2BAA2B,GAAG,wBAAwB,CAAC;AACpE,mEAAmE;AACnE,MAAM,CAAC,MAAM,8BAA8B,GAAG,2BAA2B,CAAC;AAE1E,uDAAuD;AACvD,MAAM,CAAC,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AACxD,sDAAsD;AACtD,MAAM,CAAC,MAAM,wBAAwB,GAAG,qBAAqB,CAAC;AAE9D,8DAA8D;AAC9D,MAAM,CAAC,MAAM,+BAA+B,GAAG,4BAA4B,CAAC;AAC5E,uDAAuD;AACvD,MAAM,CAAC,MAAM,uBAAuB,GAAG,oBAAoB,CAAC;AAC5D;;;;GAIG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,2BAA2B,CAAC;AAE1E,8EAA8E;AAC9E,WAAW;AACX,gEAAgE;AAChE,8EAA8E;AAE9E,6DAA6D;AAC7D,MAAM,CAAC,MAAM,2BAA2B,GAAG,qBAAqB,CAAC;AACjE,8FAA8F;AAC9F,MAAM,CAAC,MAAM,8BAA8B,GAAG,wBAAwB,CAAC;AACvE,yEAAyE;AACzE,MAAM,CAAC,MAAM,iCAAiC,GAAG,2BAA2B,CAAC;AAE7E,+DAA+D;AAC/D,MAAM,CAAC,MAAM,wBAAwB,GAAG,kBAAkB,CAAC;AAC3D,sDAAsD;AACtD,MAAM,CAAC,MAAM,2BAA2B,GAAG,qBAAqB,CAAC;AAEjE,uDAAuD;AACvD,MAAM,CAAC,MAAM,4BAA4B,GAAG,sBAAsB,CAAC;AACnE,2DAA2D;AAC3D,MAAM,CAAC,MAAM,8BAA8B,GAAG,wBAAwB,CAAC;AACvE;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,oBAAoB,CAAC;AAE/D,8EAA8E;AAC9E,YAAY;AACZ,qEAAqE;AACrE,iFAAiF;AACjF,8EAA8E;AAE9E,MAAM,CAAC,MAAM,sBAAsB,GAAG,wBAAwB,CAAC;AAC/D,MAAM,CAAC,MAAM,uBAAuB,GAAG,yBAAyB,CAAC;AACjE;;;GAGG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,6BAA6B,CAAC;AACzE,MAAM,CAAC,MAAM,yBAAyB,GAAG,2BAA2B,CAAC;AAErE,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E,sEAAsE;AACtE,MAAM,CAAC,MAAM,gCAAgC,GAAG,wBAAwB,CAAC;AACzE,mFAAmF;AACnF,MAAM,CAAC,MAAM,oCAAoC,GAAG,4BAA4B,CAAC;AACjF,iFAAiF;AACjF,MAAM,CAAC,MAAM,6BAA6B,GAAG,qBAAqB,CAAC;AACnE,2DAA2D;AAC3D,MAAM,CAAC,MAAM,8BAA8B,GAAG,sBAAsB,CAAC;AACrE,qEAAqE;AACrE,MAAM,CAAC,MAAM,kCAAkC,GAAG,0BAA0B,CAAC;AAE7E,8EAA8E;AAC9E,2CAA2C;AAC3C,wEAAwE;AACxE,kDAAkD;AAClD,8EAA8E;AAE9E,sEAAsE;AACtE,MAAM,CAAC,MAAM,iCAAiC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;AAC1E,qDAAqD;AACrD,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC;AACpD,iEAAiE;AACjE,MAAM,CAAC,MAAM,kCAAkC,GAAG,QAAQ,CAAC"}
1
+ {"version":3,"file":"identity-constants.mjs","sourceRoot":"","sources":["../../src/identity/identity-constants.mts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAC9E,4EAA4E;AAC5E,8EAA8E;AAE9E,6DAA6D;AAC7D,MAAM,CAAC,MAAM,wBAAwB,GAAG,qBAAqB,CAAC;AAC9D,kEAAkE;AAClE,MAAM,CAAC,MAAM,2BAA2B,GAAG,wBAAwB,CAAC;AACpE,mEAAmE;AACnE,MAAM,CAAC,MAAM,8BAA8B,GAAG,2BAA2B,CAAC;AAE1E,uDAAuD;AACvD,MAAM,CAAC,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AACxD,sDAAsD;AACtD,MAAM,CAAC,MAAM,wBAAwB,GAAG,qBAAqB,CAAC;AAE9D,8DAA8D;AAC9D,MAAM,CAAC,MAAM,+BAA+B,GAAG,4BAA4B,CAAC;AAC5E,uDAAuD;AACvD,MAAM,CAAC,MAAM,uBAAuB,GAAG,oBAAoB,CAAC;AAC5D;;;;GAIG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,2BAA2B,CAAC;AAE1E,8EAA8E;AAC9E,WAAW;AACX,gEAAgE;AAChE,8EAA8E;AAE9E,6DAA6D;AAC7D,MAAM,CAAC,MAAM,2BAA2B,GAAG,qBAAqB,CAAC;AACjE,8FAA8F;AAC9F,MAAM,CAAC,MAAM,8BAA8B,GAAG,wBAAwB,CAAC;AACvE,yEAAyE;AACzE,MAAM,CAAC,MAAM,iCAAiC,GAAG,2BAA2B,CAAC;AAE7E,+DAA+D;AAC/D,MAAM,CAAC,MAAM,wBAAwB,GAAG,kBAAkB,CAAC;AAC3D,sDAAsD;AACtD,MAAM,CAAC,MAAM,2BAA2B,GAAG,qBAAqB,CAAC;AAEjE,uDAAuD;AACvD,MAAM,CAAC,MAAM,4BAA4B,GAAG,sBAAsB,CAAC;AACnE,2DAA2D;AAC3D,MAAM,CAAC,MAAM,8BAA8B,GAAG,wBAAwB,CAAC;AACvE;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,oBAAoB,CAAC;AAE/D,8EAA8E;AAC9E,YAAY;AACZ,mEAAmE;AACnE,+EAA+E;AAC/E,8EAA8E;AAE9E,MAAM,CAAC,MAAM,sBAAsB,GAAG,wBAAwB,CAAC;AAC/D,MAAM,CAAC,MAAM,uBAAuB,GAAG,yBAAyB,CAAC;AACjE;;;GAGG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,6BAA6B,CAAC;AACzE,MAAM,CAAC,MAAM,yBAAyB,GAAG,2BAA2B,CAAC;AAErE,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E,sEAAsE;AACtE,MAAM,CAAC,MAAM,gCAAgC,GAAG,wBAAwB,CAAC;AACzE,mFAAmF;AACnF,MAAM,CAAC,MAAM,oCAAoC,GAAG,4BAA4B,CAAC;AACjF,iFAAiF;AACjF,MAAM,CAAC,MAAM,6BAA6B,GAAG,qBAAqB,CAAC;AACnE,2DAA2D;AAC3D,MAAM,CAAC,MAAM,8BAA8B,GAAG,sBAAsB,CAAC;AACrE,qEAAqE;AACrE,MAAM,CAAC,MAAM,kCAAkC,GAAG,0BAA0B,CAAC;AAE7E,8EAA8E;AAC9E,2CAA2C;AAC3C,wEAAwE;AACxE,kDAAkD;AAClD,8EAA8E;AAE9E,sEAAsE;AACtE,MAAM,CAAC,MAAM,iCAAiC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;AAC1E,qDAAqD;AACrD,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC;AACpD,iEAAiE;AACjE,MAAM,CAAC,MAAM,kCAAkC,GAAG,QAAQ,CAAC"}
@@ -187,17 +187,17 @@ export interface IIdentityService {
187
187
  getTip(tjpGib: IbGibAddr): Promise<KeystoneIbGib_V1>;
188
188
  }
189
189
  /**
190
- * Inputs for deriving a tier-specific MasterSecret from a root passphrase.
190
+ * Inputs for deriving a tier-specific MasterSecret from a root password.
191
191
  *
192
192
  * Each tier uses a different salt to ensure independent MasterSecrets
193
- * even when the same passphrase is used for all tiers.
193
+ * even when the same password is used for all tiers.
194
194
  *
195
195
  * @see docs/identity/KEYSTONES.md for per-tier salt conventions
196
196
  * @see identity-helpers.mts for derivation functions
197
197
  */
198
198
  export interface MasterSecretDerivationContext {
199
- /** The root passphrase (sovereign path) or server secret (custodial path). */
200
- passphrase: string;
199
+ /** The root password (sovereign path) or server secret (custodial path). */
200
+ password: string;
201
201
  /**
202
202
  * Tier-specific salt (e.g., `IDENTITY_KDF_SALT_META`, `IDENTITY_KDF_SALT_LOCAL`).
203
203
  * @see identity-constants.mts
@@ -1 +1 @@
1
- {"version":3,"file":"identity-types.d.mts","sourceRoot":"","sources":["../../src/identity/identity-types.mts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAC;AAMrG;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACrD;;;;;;;;;OASG;IACH,mBAAmB,EAAE,SAAS,EAAE,CAAC;IAEjC;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACtD;;;;;;;;;;;;OAYG;IACH,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CAClD;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IACzD,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,WAAW,EAAE,SAAS,CAAC;IAEvB;;;;OAIG;IACH,UAAU,EAAE,SAAS,CAAC;IAEtB;;;;;;;;OAQG;IACH,uBAAuB,CAAC,EAAE,SAAS,CAAC;CACvC;AAMD;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACjC,yEAAyE;IACzE,UAAU,EAAE,SAAS,CAAC;IAEtB,oEAAoE;IACpE,kBAAkB,EAAE,MAAM,CAAC;IAE3B,sDAAsD;IACtD,WAAW,EAAE,SAAS,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACpC,4CAA4C;IAC5C,UAAU,EAAE,SAAS,CAAC;IAEtB,sDAAsD;IACtD,WAAW,EAAE,SAAS,CAAC;IAEvB;;;OAGG;IACH,cAAc,EAAE,SAAS,CAAC;IAE1B,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;CACjB;AAMD;;;;;;;;;;GAUG;AACH,MAAM,WAAW,gBAAgB;IAC7B;;;;;;OAMG;IACH,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,SAAS,CAAA;KAAE,CAAC,CAAC;IAErE;;;;;;;OAOG;IACH,aAAa,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtD;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAEzD;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACxD;AAMD;;;;;;;;GAQG;AACH,MAAM,WAAW,6BAA6B;IAC1C,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB"}
1
+ {"version":3,"file":"identity-types.d.mts","sourceRoot":"","sources":["../../src/identity/identity-types.mts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAC;AAMrG;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACrD;;;;;;;;;OASG;IACH,mBAAmB,EAAE,SAAS,EAAE,CAAC;IAEjC;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACtD;;;;;;;;;;;;OAYG;IACH,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CAClD;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IACzD,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,WAAW,EAAE,SAAS,CAAC;IAEvB;;;;OAIG;IACH,UAAU,EAAE,SAAS,CAAC;IAEtB;;;;;;;;OAQG;IACH,uBAAuB,CAAC,EAAE,SAAS,CAAC;CACvC;AAMD;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACjC,yEAAyE;IACzE,UAAU,EAAE,SAAS,CAAC;IAEtB,oEAAoE;IACpE,kBAAkB,EAAE,MAAM,CAAC;IAE3B,sDAAsD;IACtD,WAAW,EAAE,SAAS,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACpC,4CAA4C;IAC5C,UAAU,EAAE,SAAS,CAAC;IAEtB,sDAAsD;IACtD,WAAW,EAAE,SAAS,CAAC;IAEvB;;;OAGG;IACH,cAAc,EAAE,SAAS,CAAC;IAE1B,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;CACjB;AAMD;;;;;;;;;;GAUG;AACH,MAAM,WAAW,gBAAgB;IAC7B;;;;;;OAMG;IACH,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,SAAS,CAAA;KAAE,CAAC,CAAC;IAErE;;;;;;;OAOG;IACH,aAAa,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtD;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAEzD;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACxD;AAMD;;;;;;;;GAQG;AACH,MAAM,WAAW,6BAA6B;IAC1C,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB"}
@@ -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
  }
@@ -19,11 +19,20 @@ export declare class AddDeviceComponentMeta extends IbGibDynamicComponentMetaBas
19
19
  interface AddDeviceElements extends ElementsBase {
20
20
  containerEl: HTMLDivElement;
21
21
  titleEl: HTMLHeadingElement;
22
+ subtitleEl: HTMLParagraphElement;
23
+ surfaceEntryEl: HTMLDivElement;
24
+ btnGoogleSso: HTMLButtonElement;
25
+ btnGithubSso: HTMLButtonElement;
22
26
  inputIdentifier: HTMLInputElement;
27
+ btnContinueEmail: HTMLButtonElement;
28
+ sectionCodeVerification: HTMLDivElement;
29
+ inputCode: HTMLInputElement;
30
+ btnVerifyCode: HTMLButtonElement;
31
+ sectionSovereignPassword: HTMLDivElement;
32
+ inputPassword: HTMLInputElement;
33
+ btnAuthorizePassword: HTMLButtonElement;
23
34
  inputDeviceTag: HTMLInputElement;
24
- inputPassphrase: HTMLInputElement;
25
35
  checkboxMakeActive: HTMLInputElement;
26
- btnAddDeviceEl: HTMLButtonElement;
27
36
  statusArea: HTMLDivElement;
28
37
  statusText: HTMLParagraphElement;
29
38
  resultAreaEl: HTMLDivElement;
@@ -34,16 +43,24 @@ interface AddDeviceElements extends ElementsBase {
34
43
  */
35
44
  export declare class AddDeviceComponentInstance extends IbGibFormInstanceBase<IbGib_V1, AddDeviceElements> implements IbGibDynamicComponentInstance<IbGib_V1, AddDeviceElements> {
36
45
  protected lc: string;
46
+ private _stagedEmail?;
47
+ private _stagedPrimaryTjpAddr?;
48
+ private _stagedPrimaryKeystone?;
49
+ private _stagedPrimaryGraph?;
37
50
  constructor();
38
51
  initialize(opts: IbGibDynamicComponentInstanceInitOpts): Promise<void>;
39
52
  created(): Promise<void>;
40
53
  disconnected(): Promise<void>;
41
54
  private initHandlers;
42
- private setButtonLoading;
43
- /**
44
- * Executes the Phase 1 Add-Device pairing orchestration flow.
45
- */
46
- protected handleAddDevice(): Promise<void>;
55
+ private getDeviceTag;
56
+ protected handleSsoClick(providerId: 'google' | 'github'): Promise<void>;
57
+ protected handleContinueEmail(): Promise<void>;
58
+ protected handleVerifyCode(): Promise<void>;
59
+ private completeCustodialDelegateOnboarding;
60
+ protected handleAuthorizePassword(): Promise<void>;
61
+ private finalizeDeviceOnboarding;
62
+ protected renderUI(): Promise<void>;
63
+ handleContextUpdated(): Promise<void>;
47
64
  }
48
65
  export {};
49
66
  //# sourceMappingURL=add-device.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"add-device.d.mts","sourceRoot":"","sources":["../../../../../src/ui/component/identity/add-device/add-device.mts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAY3D,OAAO,EAAE,6BAA6B,EAAE,qBAAqB,EAAG,MAAM,yCAAyC,CAAC;AAChH,OAAO,EACH,YAAY,EAAE,6BAA6B,EAC3C,qCAAqC,EACxC,MAAM,2BAA2B,CAAC;AAMnC,eAAO,MAAM,yBAAyB,qBAAqB,CAAC;AAE5D;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,6BAA6B;IACrE,SAAS,CAAC,EAAE,EAAE,MAAM,CAA8B;IAElD,WAAW,CAAC,EAAE,MAAM,CAAgD;IACpE,aAAa,SAA6B;IAE1C,cAKC;IAEK,cAAc,CAAC,EACjB,IAAI,EACJ,SAAS,EACZ,EAAE;QACC,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,SAAS,CAAC;KACxB,GAAG,OAAO,CAAC,6BAA6B,CAAC,CASzC;CACJ;AAED,UAAU,iBAAkB,SAAQ,YAAY;IAC5C,WAAW,EAAE,cAAc,CAAC;IAC5B,OAAO,EAAE,kBAAkB,CAAC;IAC5B,eAAe,EAAE,gBAAgB,CAAC;IAClC,cAAc,EAAE,gBAAgB,CAAC;IACjC,eAAe,EAAE,gBAAgB,CAAC;IAClC,kBAAkB,EAAE,gBAAgB,CAAC;IACrC,cAAc,EAAE,iBAAiB,CAAC;IAClC,UAAU,EAAE,cAAc,CAAC;IAC3B,UAAU,EAAE,oBAAoB,CAAC;IACjC,YAAY,EAAE,cAAc,CAAC;IAC7B,cAAc,EAAE,WAAW,CAAC;CAC/B;AAED;;GAEG;AACH,qBAAa,0BACT,SAAQ,qBAAqB,CAAC,QAAQ,EAAE,iBAAiB,CACzD,YAAW,6BAA6B,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IAErE,SAAS,CAAC,EAAE,EAAE,MAAM,CAAkC;IAEtD,cAEC;IAEc,UAAU,CAAC,IAAI,EAAE,qCAAqC,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpF;IAEc,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAmBtC;IAEc,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3C;IAED,OAAO,CAAC,YAAY;IAuBpB,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,UAAgB,eAAe,kBAmP9B;CACJ"}
1
+ {"version":3,"file":"add-device.d.mts","sourceRoot":"","sources":["../../../../../src/ui/component/identity/add-device/add-device.mts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAc3D,OAAO,EAAE,6BAA6B,EAAE,qBAAqB,EAAG,MAAM,yCAAyC,CAAC;AAChH,OAAO,EACH,YAAY,EAAE,6BAA6B,EAC3C,qCAAqC,EACxC,MAAM,2BAA2B,CAAC;AASnC,eAAO,MAAM,yBAAyB,qBAAqB,CAAC;AAE5D;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,6BAA6B;IACrE,SAAS,CAAC,EAAE,EAAE,MAAM,CAA8B;IAElD,WAAW,CAAC,EAAE,MAAM,CAAgD;IACpE,aAAa,SAA6B;IAE1C,cAKC;IAEK,cAAc,CAAC,EACjB,IAAI,EACJ,SAAS,EACZ,EAAE;QACC,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,SAAS,CAAC;KACxB,GAAG,OAAO,CAAC,6BAA6B,CAAC,CASzC;CACJ;AAED,UAAU,iBAAkB,SAAQ,YAAY;IAC5C,WAAW,EAAE,cAAc,CAAC;IAC5B,OAAO,EAAE,kBAAkB,CAAC;IAC5B,UAAU,EAAE,oBAAoB,CAAC;IACjC,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,EAAE,iBAAiB,CAAC;IAChC,YAAY,EAAE,iBAAiB,CAAC;IAChC,eAAe,EAAE,gBAAgB,CAAC;IAClC,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,uBAAuB,EAAE,cAAc,CAAC;IACxC,SAAS,EAAE,gBAAgB,CAAC;IAC5B,aAAa,EAAE,iBAAiB,CAAC;IACjC,wBAAwB,EAAE,cAAc,CAAC;IACzC,aAAa,EAAE,gBAAgB,CAAC;IAChC,oBAAoB,EAAE,iBAAiB,CAAC;IACxC,cAAc,EAAE,gBAAgB,CAAC;IACjC,kBAAkB,EAAE,gBAAgB,CAAC;IACrC,UAAU,EAAE,cAAc,CAAC;IAC3B,UAAU,EAAE,oBAAoB,CAAC;IACjC,YAAY,EAAE,cAAc,CAAC;IAC7B,cAAc,EAAE,WAAW,CAAC;CAC/B;AAED;;GAEG;AACH,qBAAa,0BACT,SAAQ,qBAAqB,CAAC,QAAQ,EAAE,iBAAiB,CACzD,YAAW,6BAA6B,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IAErE,SAAS,CAAC,EAAE,EAAE,MAAM,CAAkC;IAGtD,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,qBAAqB,CAAC,CAAS;IACvC,OAAO,CAAC,sBAAsB,CAAC,CAAmB;IAClD,OAAO,CAAC,mBAAmB,CAAC,CAAiB;IAE7C,cAEC;IAEc,UAAU,CAAC,IAAI,EAAE,qCAAqC,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpF;IAEc,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAmCtC;IAEc,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3C;IAED,OAAO,CAAC,YAAY;IA+BpB,OAAO,CAAC,YAAY;IAiBpB,UAAgB,cAAc,CAAC,UAAU,EAAE,QAAQ,GAAG,QAAQ,iBA2D7D;IAMD,UAAgB,mBAAmB,kBAgElC;IAED,UAAgB,gBAAgB,kBA2G/B;YAMa,mCAAmC;IA2FjD,UAAgB,uBAAuB,kBAyItC;YAMa,wBAAwB;IA+FtC,UAAyB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAEjD;IAEc,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEnD;CACJ"}
@@ -1,37 +1,111 @@
1
1
  <div id="container" class="component-container">
2
- <h2 id="title">Sign In New Device</h2>
2
+ <h2 id="title">Sign In to Device</h2>
3
3
  <div class="content">
4
- <p>Sign in on this device to add it to an existing account.</p>
4
+ <p id="subtitle" style="margin-bottom: 1.25rem; font-size: 0.95rem; color: #a6adc8;">
5
+ Sign in on this device to link and synchronize your identity.
6
+ </p>
5
7
 
6
- <div class="input-group">
7
- <label for="input-identifier">Email</label>
8
- <input type="text" id="input-identifier" placeholder="Enter registered email..." class="text-input">
9
- </div>
8
+ <!-- ----------------------------------------------------------------- -->
9
+ <!-- Surface 1: Main Sign In Entry Surface -->
10
+ <!-- ----------------------------------------------------------------- -->
11
+ <div id="surface-entry">
12
+ <div class="sso-options"
13
+ style="display: flex; flex-direction: column; gap: 0.6rem; margin-bottom: 1.25rem;">
14
+ <button id="btn-google-sso" class="sso-btn google-btn">
15
+ <svg width="18" height="18" viewBox="0 0 24 24">
16
+ <path fill="#4285F4"
17
+ d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z" />
18
+ <path fill="#34A853"
19
+ d="M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z" />
20
+ <path fill="#FBBC05"
21
+ d="M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.06H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.94l2.85-2.22.81-.63z" />
22
+ <path fill="#EA4335"
23
+ d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.06l3.66 2.84c.87-2.6 3.3-4.52 6.16-4.52z" />
24
+ </svg>
25
+ Continue with Google
26
+ </button>
27
+ <button id="btn-github-sso" class="sso-btn github-btn">
28
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor">
29
+ <path
30
+ d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z" />
31
+ </svg>
32
+ Continue with GitHub
33
+ </button>
34
+ </div>
10
35
 
11
- <div class="input-group">
12
- <label for="input-device-tag">Device Name</label>
13
- <input type="text" id="input-device-tag" placeholder="e.g. laptop, phone, living-room..."
14
- class="text-input">
15
- </div>
36
+ <div class="divider">
37
+ <span>OR SIGN IN WITH EMAIL</span>
38
+ </div>
16
39
 
17
- <div class="input-group">
18
- <label for="input-passphrase">Master Passphrase</label>
19
- <input type="password" id="input-passphrase" placeholder="Enter your master passphrase..."
20
- class="secret-input">
40
+ <div class="input-group">
41
+ <label for="input-identifier">Email</label>
42
+ <input type="email" id="input-identifier" placeholder="Enter your registered email..."
43
+ class="text-input">
44
+ </div>
45
+
46
+ <div class="action-row" style="margin-top: 0.75rem;">
47
+ <button id="btn-continue-email" class="action-btn">Continue with Email</button>
48
+ </div>
21
49
  </div>
22
50
 
23
- <div class="checkbox-group" style="margin-bottom: 1.5rem; display: flex; align-items: center; gap: 0.5rem;">
24
- <input type="checkbox" id="checkbox-make-active" checked
25
- style="cursor: pointer; width: 1rem; height: 1rem;">
26
- <label for="checkbox-make-active" style="cursor: pointer; font-size: 0.9rem; user-select: none;">Set as
27
- active device on this browser</label>
51
+ <!-- ----------------------------------------------------------------- -->
52
+ <!-- Surface 2 (Conditional): 6-Digit Email OTP Verification -->
53
+ <!-- ----------------------------------------------------------------- -->
54
+ <div id="section-code-verification" class="input-group hidden"
55
+ style="margin-top: 1.25rem; padding: 1rem; border: 1px dashed #89b4fa; border-radius: 8px; background: rgba(137, 180, 250, 0.05);">
56
+ <label for="input-code" style="font-weight: bold; color: #89b4fa;">✉️ Enter 6-Digit Email Verification
57
+ Code</label>
58
+ <p style="font-size: 0.82rem; color: #a6adc8; margin-top: 0.25rem; margin-bottom: 0.75rem;">Check your email
59
+ for your 6-digit verification code:</p>
60
+ <div style="display: flex; gap: 0.5rem; flex-wrap: wrap; align-items: center;">
61
+ <input type="text" id="input-code" maxlength="6" placeholder="123456" class="text-input"
62
+ style="font-family: monospace; font-size: 1.2rem; letter-spacing: 4px; text-align: center; max-width: 160px;">
63
+ <button id="btn-verify-code" class="action-btn" style="white-space: nowrap; width: auto;">Verify
64
+ Code</button>
65
+ </div>
28
66
  </div>
29
67
 
30
- <div class="action-row">
31
- <button id="btn-add-device" class="action-btn">Sign In</button>
68
+ <!-- ----------------------------------------------------------------- -->
69
+ <!-- Surface 3 (Conditional): Sovereign Primary Password Entry -->
70
+ <!-- ----------------------------------------------------------------- -->
71
+ <div id="section-sovereign-password" class="input-group hidden"
72
+ style="margin-top: 1.25rem; padding: 1rem; border: 1px dashed #f59e0b; border-radius: 8px; background: rgba(245, 158, 11, 0.05);">
73
+ <label for="input-password" style="font-weight: bold; color: #f59e0b;">🔐 Primary Password
74
+ Required</label>
75
+ <p style="font-size: 0.82rem; color: #a6adc8; margin-top: 0.25rem; margin-bottom: 0.75rem;">This sovereign
76
+ identity requires your master password to authorize this device:</p>
77
+ <div class="input-group">
78
+ <input type="password" id="input-password" placeholder="Enter your master password..."
79
+ class="secret-input text-input">
80
+ </div>
81
+ <div class="action-row" style="margin-top: 0.5rem;">
82
+ <button id="btn-authorize-password" class="action-btn">Authorize & Pair Device</button>
83
+ </div>
32
84
  </div>
33
85
 
34
- <div class="switch-workflow" style="margin-top: 1.2rem; text-align: center; font-size: 0.9rem; color: #a6adc8;">
86
+ <!-- ----------------------------------------------------------------- -->
87
+ <!-- Advanced Settings (Collapsible Device Tag & Active Toggle) -->
88
+ <!-- ----------------------------------------------------------------- -->
89
+ <details id="details-device-options"
90
+ style="margin-top: 1.25rem; font-size: 0.85rem; color: #a6adc8; cursor: pointer;">
91
+ <summary style="user-select: none; font-weight: 500;">⚙️ Advanced Device Options</summary>
92
+ <div style="padding-top: 0.75rem;">
93
+ <div class="input-group" style="margin-bottom: 0.75rem;">
94
+ <label for="input-device-tag" style="font-size: 0.82rem;">Device Name / Tag</label>
95
+ <input type="text" id="input-device-tag" placeholder="e.g. laptop, phone, living-room..."
96
+ class="text-input" style="font-size: 0.88rem; padding: 0.55rem 0.8rem;">
97
+ </div>
98
+ <div class="checkbox-group" style="display: flex; align-items: center; gap: 0.5rem;">
99
+ <input type="checkbox" id="checkbox-make-active" checked
100
+ style="cursor: pointer; width: 0.95rem; height: 0.95rem;">
101
+ <label for="checkbox-make-active"
102
+ style="cursor: pointer; font-size: 0.82rem; user-select: none;">Set as active identity on this
103
+ browser</label>
104
+ </div>
105
+ </div>
106
+ </details>
107
+
108
+ <div class="switch-workflow" style="margin-top: 1.5rem; text-align: center; font-size: 0.9rem; color: #a6adc8;">
35
109
  Need a new identity? <button id="btn-switch-create-account" class="link-btn"
36
110
  style="background: none; border: none; color: #89b4fa; font-weight: 600; cursor: pointer; text-decoration: underline; padding: 0; font-size: 0.9rem;">Create
37
111
  Account</button>