@ibgib/web-gib 0.0.59 → 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 +490 -186
- 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 +7 -4
- 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 +577 -194
- package/src/ui/component/identity/keystone-creator/keystone-creator.mts +7 -4
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custodian-delegate-helper.d.mts","sourceRoot":"","sources":["../../src/identity/custodian-delegate-helper.mts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
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
|
|
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 =
|
|
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
|
-
|
|
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;
|
|
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
|
|
60
|
-
// Different salt per tier ensures independent secrets even with same
|
|
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,
|
|
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
|
|
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
|
|
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
|
|
200
|
-
|
|
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,
|
|
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.
|
|
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
|
}
|
|
@@ -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
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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;
|
|
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
|
|
2
|
+
<h2 id="title">Sign In to Device</h2>
|
|
3
3
|
<div class="content">
|
|
4
|
-
<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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class="text-input">
|
|
15
|
-
</div>
|
|
36
|
+
<div class="divider">
|
|
37
|
+
<span>OR SIGN IN WITH EMAIL</span>
|
|
38
|
+
</div>
|
|
16
39
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
-
|
|
31
|
-
|
|
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
|
-
|
|
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>
|