@ibgib/web-gib 0.0.60 → 0.0.62

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 (89) hide show
  1. package/dist/AUTO-GENERATED-version.d.mts +1 -1
  2. package/dist/AUTO-GENERATED-version.mjs +1 -1
  3. package/dist/helpers.d.mts.map +1 -1
  4. package/dist/helpers.mjs +1 -0
  5. package/dist/helpers.mjs.map +1 -1
  6. package/dist/helpers.web.d.mts +3 -1
  7. package/dist/helpers.web.d.mts.map +1 -1
  8. package/dist/helpers.web.mjs +17 -1
  9. package/dist/helpers.web.mjs.map +1 -1
  10. package/dist/identity/device-delegate-helper.d.mts +91 -0
  11. package/dist/identity/device-delegate-helper.d.mts.map +1 -0
  12. package/dist/identity/device-delegate-helper.mjs +190 -0
  13. package/dist/identity/device-delegate-helper.mjs.map +1 -0
  14. package/dist/identity/device-delegate.respec.d.mts +2 -0
  15. package/dist/identity/device-delegate.respec.d.mts.map +1 -0
  16. package/dist/identity/device-delegate.respec.mjs +106 -0
  17. package/dist/identity/device-delegate.respec.mjs.map +1 -0
  18. package/dist/identity/keystone-sync-service.d.mts +18 -0
  19. package/dist/identity/keystone-sync-service.d.mts.map +1 -1
  20. package/dist/identity/keystone-sync-service.mjs +77 -1
  21. package/dist/identity/keystone-sync-service.mjs.map +1 -1
  22. package/dist/identity/passkey-helper.d.mts +72 -0
  23. package/dist/identity/passkey-helper.d.mts.map +1 -0
  24. package/dist/identity/passkey-helper.mjs +237 -0
  25. package/dist/identity/passkey-helper.mjs.map +1 -0
  26. package/dist/identity/passkey.respec.d.mts +2 -0
  27. package/dist/identity/passkey.respec.d.mts.map +1 -0
  28. package/dist/identity/passkey.respec.mjs +169 -0
  29. package/dist/identity/passkey.respec.mjs.map +1 -0
  30. package/dist/index.d.mts +2 -1
  31. package/dist/index.d.mts.map +1 -1
  32. package/dist/index.mjs +2 -2
  33. package/dist/index.mjs.map +1 -1
  34. package/dist/storage/storage-helpers.web.d.mts +9 -0
  35. package/dist/storage/storage-helpers.web.d.mts.map +1 -1
  36. package/dist/storage/storage-helpers.web.mjs +42 -0
  37. package/dist/storage/storage-helpers.web.mjs.map +1 -1
  38. package/dist/ui/component/identity/add-device/add-device.d.mts.map +1 -1
  39. package/dist/ui/component/identity/add-device/add-device.mjs +31 -43
  40. package/dist/ui/component/identity/add-device/add-device.mjs.map +1 -1
  41. package/dist/ui/component/identity/keystone-creator/keystone-creator.d.mts +18 -1
  42. package/dist/ui/component/identity/keystone-creator/keystone-creator.d.mts.map +1 -1
  43. package/dist/ui/component/identity/keystone-creator/keystone-creator.html +42 -3
  44. package/dist/ui/component/identity/keystone-creator/keystone-creator.mjs +524 -104
  45. package/dist/ui/component/identity/keystone-creator/keystone-creator.mjs.map +1 -1
  46. package/dist/ui/component/identity/keystone-details/keystone-details.d.mts +19 -1
  47. package/dist/ui/component/identity/keystone-details/keystone-details.d.mts.map +1 -1
  48. package/dist/ui/component/identity/keystone-details/keystone-details.html +38 -0
  49. package/dist/ui/component/identity/keystone-details/keystone-details.mjs +1217 -132
  50. package/dist/ui/component/identity/keystone-details/keystone-details.mjs.map +1 -1
  51. package/dist/ui/component/identity/remove-device/remove-device.d.mts.map +1 -1
  52. package/dist/ui/component/identity/remove-device/remove-device.mjs +1 -0
  53. package/dist/ui/component/identity/remove-device/remove-device.mjs.map +1 -1
  54. package/dist/ui/ui-constants.d.mts +1 -0
  55. package/dist/ui/ui-constants.d.mts.map +1 -1
  56. package/dist/ui/ui-constants.mjs +1 -0
  57. package/dist/ui/ui-constants.mjs.map +1 -1
  58. package/dist/ui/ui-helpers.d.mts +3 -0
  59. package/dist/ui/ui-helpers.d.mts.map +1 -1
  60. package/dist/ui/ui-helpers.mjs +110 -6
  61. package/dist/ui/ui-helpers.mjs.map +1 -1
  62. package/dist/ui/ui-types.d.mts +5 -0
  63. package/dist/ui/ui-types.d.mts.map +1 -1
  64. package/package.json +2 -2
  65. package/src/AUTO-GENERATED-version.mts +1 -1
  66. package/src/helpers.mts +1 -0
  67. package/src/helpers.web.mts +22 -2
  68. package/src/identity/custodian-delegate-helper.mts.bak +7 -0
  69. package/src/identity/device-delegate-helper.mts +268 -0
  70. package/src/identity/device-delegate.respec.mts +125 -0
  71. package/src/identity/keystone-sync-service.mts +95 -2
  72. package/src/identity/passkey-helper.mts +304 -0
  73. package/src/identity/passkey.respec.mts +194 -0
  74. package/src/index.mts +2 -2
  75. package/src/storage/storage-helpers.web.mts +47 -0
  76. package/src/ui/component/identity/add-device/add-device.mts +37 -48
  77. package/src/ui/component/identity/keystone-creator/keystone-creator.html +42 -3
  78. package/src/ui/component/identity/keystone-creator/keystone-creator.mts +568 -111
  79. package/src/ui/component/identity/keystone-details/keystone-details.html +38 -0
  80. package/src/ui/component/identity/keystone-details/keystone-details.mts +1290 -142
  81. package/src/ui/component/identity/remove-device/remove-device.mts +1 -0
  82. package/src/ui/ui-constants.mts +1 -0
  83. package/src/ui/ui-helpers.mts +118 -5
  84. package/src/ui/ui-types.mts +6 -0
  85. package/dist/identity/custodian-delegate-helper.d.mts +0 -22
  86. package/dist/identity/custodian-delegate-helper.d.mts.map +0 -1
  87. package/dist/identity/custodian-delegate-helper.mjs +0 -67
  88. package/dist/identity/custodian-delegate-helper.mjs.map +0 -1
  89. package/src/identity/custodian-delegate-helper.mts +0 -86
@@ -1 +1 @@
1
- {"version":3,"file":"ui-helpers.mjs","sourceRoot":"","sources":["../../src/ui/ui-helpers.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ui-helpers.mjs","sourceRoot":"","sources":["../../src/ui/ui-helpers.mts"],"names":[],"mappings":"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"}
@@ -17,4 +17,9 @@ export interface EventIbGibIdentityUpdateAvailableDetail {
17
17
  localN: number;
18
18
  serverLatestAddr: string;
19
19
  }
20
+ export interface EventIbGibIdentityRenewalRequiredDetail {
21
+ activePrimaryAddr: string;
22
+ primaryTjpAddr: string;
23
+ reason: 'expired' | 'missing_secret';
24
+ }
20
25
  //# sourceMappingURL=ui-types.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ui-types.d.mts","sourceRoot":"","sources":["../../src/ui/ui-types.mts"],"names":[],"mappings":"AACA;;;GAGG;AACH,MAAM,WAAW,WAAW;IACxB;;OAEG;IACH,oBAAoB,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KAAE,CAAA;CACnD;AAED,MAAM,WAAW,uCAAuC;IACpD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;CAC5B"}
1
+ {"version":3,"file":"ui-types.d.mts","sourceRoot":"","sources":["../../src/ui/ui-types.mts"],"names":[],"mappings":"AACA;;;GAGG;AACH,MAAM,WAAW,WAAW;IACxB;;OAEG;IACH,oBAAoB,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KAAE,CAAA;CACnD;AAED,MAAM,WAAW,uCAAuC;IACpD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,uCAAuC;IACpD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,SAAS,GAAG,gBAAgB,CAAC;CACxC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibgib/web-gib",
3
- "version": "0.0.60",
3
+ "version": "0.0.62",
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,7 +29,7 @@
29
29
  "license": "ISC",
30
30
  "dependencies": {
31
31
  "@google/genai": "^1.33.0",
32
- "@ibgib/core-gib": "^0.1.74",
32
+ "@ibgib/core-gib": "^0.1.76",
33
33
  "@ibgib/encrypt-gib": "^0.3.1",
34
34
  "@ibgib/helper-gib": "^0.0.37",
35
35
  "@ibgib/ts-gib": "^0.5.34"
@@ -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.60';
14
+ export const AUTO_GENERATED_VERSION = '0.0.62';
package/src/helpers.mts CHANGED
@@ -716,6 +716,7 @@ export function getIbGibGlobalThis_IbGib(): IbGibGlobalThisInfo {
716
716
  if (!result) {
717
717
  console.log(`${lc} initializing globalThis.${GLOBAL_THIS_IBGIB_KEY}... (I: 9d9ff1813448d9a1b82b0e5790a74825)`);
718
718
  result = {};
719
+ globalThis[GLOBAL_THIS_IBGIB_KEY] = result;
719
720
  }
720
721
 
721
722
  return result;
@@ -424,6 +424,9 @@ export async function promptForText({
424
424
  }
425
425
  }
426
426
 
427
+ import { evaluatePasskeyPrf, isPasskeyPrfSupported } from "./identity/passkey-helper.mjs";
428
+ import { KeystonePasskeyEntry } from "@ibgib/core-gib/dist/keystone/keystone-types.mjs";
429
+
427
430
  /**
428
431
  * not implemented atow (12/2024). I think we'll have perhaps a modal dialog
429
432
  * with a known name and get at it that way.
@@ -431,9 +434,11 @@ export async function promptForText({
431
434
  export async function promptForSecret({
432
435
  msg,
433
436
  confirm,
437
+ passkeys,
434
438
  }: {
435
- msg?: string,
436
- confirm: boolean,
439
+ msg?: string;
440
+ confirm: boolean;
441
+ passkeys?: Record<string, KeystonePasskeyEntry>;
437
442
  }): Promise<string> {
438
443
  const lc = `[${promptForSecret.name}]`;
439
444
  try {
@@ -445,6 +450,19 @@ export async function promptForSecret({
445
450
  let attempts = 0;
446
451
  let maxAttempts = 5;
447
452
 
453
+ const prfSupported = await isPasskeyPrfSupported().catch(() => false);
454
+ const onPasskeyAuth = (prfSupported && passkeys && Object.keys(passkeys).length > 0)
455
+ ? async (passkeyEntry?: any) => {
456
+ if (!passkeyEntry) return undefined;
457
+ const { passkeySecret } = await evaluatePasskeyPrf({
458
+ credentialId: passkeyEntry.credentialId,
459
+ salt: passkeyEntry.salt,
460
+ transports: passkeyEntry.transports,
461
+ });
462
+ return passkeySecret;
463
+ }
464
+ : undefined;
465
+
448
466
  do {
449
467
  attempts++;
450
468
  if (attempts >= maxAttempts) {
@@ -458,6 +476,8 @@ export async function promptForSecret({
458
476
  showInput: true,
459
477
  isPassword: true,
460
478
  defaultValue: undefined,
479
+ passkeys,
480
+ onPasskeyAuth,
461
481
  });
462
482
  if (result === undefined) { throw new Error(`user cancelled (E: 91519d04378e84106f3df8eb36d99725)`); }
463
483
 
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @module identity/custodian-delegate-helper
3
+ *
4
+ * Re-exports from {@link ./device-delegate-helper.mjs} for backward compatibility.
5
+ */
6
+
7
+ export * from './device-delegate-helper.mjs';
@@ -0,0 +1,268 @@
1
+ /**
2
+ * @module identity/device-delegate-helper
3
+ *
4
+ * Client-side helper functions for deriving, retrieving, persisting, and clearing local
5
+ * cryptographic device delegate signing tokens ($S_D$) in IndexedDB.
6
+ *
7
+ * Applicable symmetrically to Sovereign, Custodial, and Hybrid identities.
8
+ */
9
+
10
+ import { extractErrorMsg, getSaferSubstring } from "@ibgib/helper-gib/dist/helpers/utils-helper.mjs";
11
+ import { deriveDeviceDelegateSecret, deriveDelegateSecret, createSyncDelegateKeystone } from "@ibgib/core-gib/dist/keystone/delegate/delegate-helpers.mjs";
12
+ import { generateDefaultDeviceTag } from "../util/device-helper.mjs";
13
+ import { storageGet, storagePut, storageDelete } from "../storage/storage-helpers.web.mjs";
14
+ import { getGlobalDbName, getGlobalStoreName } from "../helpers.web.mjs";
15
+
16
+ export { generateDefaultDeviceTag };
17
+
18
+ export const DEVICE_DELEGATE_SECRET_PREFIX = 'ibgib_device_delegate_secret_';
19
+
20
+ /**
21
+ * Builds the IndexedDB storage key for a device delegate secret given its primary identity TJP address.
22
+ */
23
+ export function getDeviceDelegateSecretKey({ primaryTjpAddr }: { primaryTjpAddr: string }): string {
24
+ if (!primaryTjpAddr) {
25
+ throw new Error('primaryTjpAddr is required to get device delegate secret key (E: 1a2b3c4d5e6f7890123456789a000101)');
26
+ }
27
+ return `${DEVICE_DELEGATE_SECRET_PREFIX}${primaryTjpAddr}`;
28
+ }
29
+
30
+ /**
31
+ * Retrieves the stored device delegate secret for the given primary identity from IndexedDB, if present.
32
+ */
33
+ export async function getDeviceDelegateSecret({
34
+ primaryTjpAddr,
35
+ }: {
36
+ primaryTjpAddr: string;
37
+ }): Promise<string | undefined> {
38
+ const lc = `[${getDeviceDelegateSecret.name}]`;
39
+ try {
40
+ if (!primaryTjpAddr) {
41
+ throw new Error('primaryTjpAddr is required to get device delegate secret (E: 2a2b3c4d5e6f7890123456789a000102)');
42
+ }
43
+
44
+ const dbName = getGlobalDbName();
45
+ const storeName = getGlobalStoreName();
46
+ const key = getDeviceDelegateSecretKey({ primaryTjpAddr });
47
+
48
+ return await storageGet({ dbName, storeName, key });
49
+ } catch (error) {
50
+ console.error(`${lc} ${extractErrorMsg(error)}`);
51
+ throw error;
52
+ }
53
+ }
54
+
55
+ /**
56
+ * Persists a device delegate secret for the given primary identity into IndexedDB.
57
+ */
58
+ export async function setDeviceDelegateSecret({
59
+ primaryTjpAddr,
60
+ delegateSecret,
61
+ }: {
62
+ primaryTjpAddr: string;
63
+ delegateSecret: string;
64
+ }): Promise<void> {
65
+ const lc = `[${setDeviceDelegateSecret.name}]`;
66
+ try {
67
+ if (!primaryTjpAddr) {
68
+ throw new Error('primaryTjpAddr is required to set device delegate secret (E: 3a2b3c4d5e6f7890123456789a000103)');
69
+ }
70
+ if (!delegateSecret) {
71
+ throw new Error('delegateSecret is required to set device delegate secret (E: 4a2b3c4d5e6f7890123456789a000104)');
72
+ }
73
+
74
+ const dbName = getGlobalDbName();
75
+ const storeName = getGlobalStoreName();
76
+ const key = getDeviceDelegateSecretKey({ primaryTjpAddr });
77
+
78
+ await storagePut({ dbName, storeName, key, value: delegateSecret });
79
+ } catch (error) {
80
+ console.error(`${lc} ${extractErrorMsg(error)}`);
81
+ throw error;
82
+ }
83
+ }
84
+
85
+ /**
86
+ * Retrieves an existing device delegate secret from IndexedDB, or generates a high-entropy 512-bit
87
+ * secret, persists it, and returns it.
88
+ */
89
+ export async function getOrCreateDeviceDelegateSecret({
90
+ primaryTjpAddr,
91
+ deviceTag,
92
+ }: {
93
+ primaryTjpAddr: string;
94
+ deviceTag?: string;
95
+ }): Promise<string> {
96
+ const lc = `[${getOrCreateDeviceDelegateSecret.name}]`;
97
+ try {
98
+ if (!primaryTjpAddr) {
99
+ throw new Error('primaryTjpAddr is required to get or create device delegate secret (E: 5a2b3c4d5e6f7890123456789a000105)');
100
+ }
101
+
102
+ const existingSecret = await getDeviceDelegateSecret({ primaryTjpAddr });
103
+ if (existingSecret) {
104
+ return existingSecret;
105
+ }
106
+
107
+ const newSecret = await deriveDeviceDelegateSecret({ primaryTjpAddr, deviceTag });
108
+ await setDeviceDelegateSecret({ primaryTjpAddr, delegateSecret: newSecret });
109
+
110
+ return newSecret;
111
+ } catch (error) {
112
+ console.error(`${lc} ${extractErrorMsg(error)}`);
113
+ throw error;
114
+ }
115
+ }
116
+
117
+ /**
118
+ * Removes the stored local device delegate secret from IndexedDB.
119
+ */
120
+ export async function clearDeviceDelegateSecret({
121
+ primaryTjpAddr,
122
+ }: {
123
+ primaryTjpAddr: string;
124
+ }): Promise<void> {
125
+ const lc = `[${clearDeviceDelegateSecret.name}]`;
126
+ try {
127
+ if (!primaryTjpAddr) { return; }
128
+
129
+ const dbName = getGlobalDbName();
130
+ const storeName = getGlobalStoreName();
131
+ const key = getDeviceDelegateSecretKey({ primaryTjpAddr });
132
+
133
+ await storageDelete({ dbName, storeName, key });
134
+ } catch (error) {
135
+ console.error(`${lc} ${extractErrorMsg(error)}`);
136
+ throw error;
137
+ }
138
+ }
139
+
140
+ /**
141
+ * Creates a Sovereign Password-based sync delegate for this device.
142
+ * Standardized format: `pwd-${safeUsername}-${defaultDeviceTag}`
143
+ */
144
+ export async function createSovereignDeviceSyncDelegate({
145
+ username,
146
+ primaryTjpAddr,
147
+ masterSecret,
148
+ metaspace,
149
+ space,
150
+ }: {
151
+ username: string;
152
+ primaryTjpAddr: string;
153
+ masterSecret: string;
154
+ metaspace?: any;
155
+ space?: any;
156
+ }): Promise<{ delegateKeystone: any; deviceTag: string; delegateSecret: string }> {
157
+ const delegateSecret = await deriveDelegateSecret({ masterSecret });
158
+ await setDeviceDelegateSecret({ primaryTjpAddr, delegateSecret });
159
+
160
+ const safeUser = getSaferSubstring({ text: username, length: 8, keepLiterals: ['-'] }) || 'user';
161
+ const defaultDeviceTag = generateDefaultDeviceTag();
162
+ const deviceTag = `pwd-${safeUser}-${defaultDeviceTag}`;
163
+ const sovereignSyncProfileName = process.env.KEYSTONE_PROFILE_SOVEREIGN_SYNC;
164
+ if (!sovereignSyncProfileName || !sovereignSyncProfileName.trim()) {
165
+ throw new Error('KEYSTONE_PROFILE_SOVEREIGN_SYNC environment variable is missing.');
166
+ }
167
+
168
+ const delegateKeystone = await createSyncDelegateKeystone({
169
+ profileName: sovereignSyncProfileName.trim() as any,
170
+ username,
171
+ deviceTag,
172
+ primaryTjpAddr,
173
+ delegateSecret,
174
+ additionalFrameDetails: { client: 'space-gib-web' },
175
+ metaspace,
176
+ space,
177
+ });
178
+
179
+ return { delegateKeystone, deviceTag, delegateSecret };
180
+ }
181
+
182
+ /**
183
+ * Creates an OAuth2 Custodial sync delegate for this device.
184
+ * Standardized format: `oauth2-${providerId}-${defaultDeviceTag}`
185
+ */
186
+ export async function createOAuth2DeviceSyncDelegate({
187
+ providerId,
188
+ username = 'user',
189
+ primaryTjpAddr,
190
+ custodianReqs,
191
+ metaspace,
192
+ space,
193
+ }: {
194
+ providerId: string;
195
+ username?: string;
196
+ primaryTjpAddr: string;
197
+ custodianReqs?: any;
198
+ metaspace?: any;
199
+ space?: any;
200
+ }): Promise<{ delegateKeystone: any; deviceTag: string; delegateSecret: string }> {
201
+ const delegateSecret = await getOrCreateDeviceDelegateSecret({ primaryTjpAddr });
202
+ const defaultDeviceTag = generateDefaultDeviceTag();
203
+ const deviceTag = `oauth2-${providerId}-${defaultDeviceTag}`;
204
+ const custodianSyncProfileName = process.env.KEYSTONE_PROFILE_CUSTODIAN_SYNC;
205
+ if (!custodianSyncProfileName || !custodianSyncProfileName.trim()) {
206
+ throw new Error('KEYSTONE_PROFILE_CUSTODIAN_SYNC environment variable is missing.');
207
+ }
208
+
209
+ const delegateKeystone = await createSyncDelegateKeystone({
210
+ profileName: custodianSyncProfileName.trim() as any,
211
+ username,
212
+ deviceTag,
213
+ primaryTjpAddr,
214
+ delegateSecret,
215
+ custodianReqs,
216
+ additionalFrameDetails: { client: 'space-gib-web' },
217
+ metaspace,
218
+ space,
219
+ });
220
+
221
+ return { delegateKeystone, deviceTag, delegateSecret };
222
+ }
223
+
224
+ /**
225
+ * Creates an Email Custodial sync delegate for this device.
226
+ * Standardized format: `email-${safeUser}@${safeDomain}-${defaultDeviceTag}`
227
+ */
228
+ export async function createEmailDeviceSyncDelegate({
229
+ email,
230
+ primaryTjpAddr,
231
+ custodianReqs,
232
+ metaspace,
233
+ space,
234
+ }: {
235
+ email: string;
236
+ primaryTjpAddr: string;
237
+ custodianReqs?: any;
238
+ metaspace?: any;
239
+ space?: any;
240
+ }): Promise<{ delegateKeystone: any; deviceTag: string; delegateSecret: string }> {
241
+ const delegateSecret = await getOrCreateDeviceDelegateSecret({ primaryTjpAddr });
242
+ const defaultDeviceTag = generateDefaultDeviceTag();
243
+ const [emailUser = '', emailDomain = ''] = (email || '').split('@');
244
+ const safeUser = getSaferSubstring({ text: emailUser, length: 8, keepLiterals: ['-'] }) || 'user';
245
+ const domainPart = emailDomain.split('.')[0] || '';
246
+ const safeDomain = domainPart ? getSaferSubstring({ text: domainPart, length: 8, keepLiterals: ['-'] }) : '';
247
+ const emailTag = safeDomain ? `${safeUser}@${safeDomain}` : safeUser;
248
+ const deviceTag = `email-${emailTag}-${defaultDeviceTag}`;
249
+ const username = safeUser;
250
+ const custodianSyncProfileName = process.env.KEYSTONE_PROFILE_CUSTODIAN_SYNC;
251
+ if (!custodianSyncProfileName || !custodianSyncProfileName.trim()) {
252
+ throw new Error('KEYSTONE_PROFILE_CUSTODIAN_SYNC environment variable is missing.');
253
+ }
254
+
255
+ const delegateKeystone = await createSyncDelegateKeystone({
256
+ profileName: custodianSyncProfileName.trim() as any,
257
+ username,
258
+ deviceTag,
259
+ primaryTjpAddr,
260
+ delegateSecret,
261
+ custodianReqs,
262
+ additionalFrameDetails: { client: 'space-gib-web' },
263
+ metaspace,
264
+ space,
265
+ });
266
+
267
+ return { delegateKeystone, deviceTag, delegateSecret };
268
+ }
@@ -0,0 +1,125 @@
1
+ import { respecfully, ifWe, ifWeMight, iReckon } from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
2
+ import { getIbGibGlobalThis_IbGib } from '../helpers.mjs';
3
+ import {
4
+ getDeviceDelegateSecretKey,
5
+ getDeviceDelegateSecret,
6
+ setDeviceDelegateSecret,
7
+ getOrCreateDeviceDelegateSecret,
8
+ clearDeviceDelegateSecret,
9
+ DEVICE_DELEGATE_SECRET_PREFIX
10
+ } from './device-delegate-helper.mjs';
11
+
12
+ const sir = `[${import.meta.url}]`;
13
+
14
+ // Initialize global db & store names for tests
15
+ const globalThisIbGib = getIbGibGlobalThis_IbGib();
16
+ globalThisIbGib.dbName_hack = 'space_gib_db';
17
+ globalThisIbGib.storeName_hack = 'space_gib_store';
18
+
19
+ // Mock storage substrate for Node test environment
20
+ const inMemoryStore = new Map<string, string>();
21
+
22
+ if (typeof globalThis.indexedDB === 'undefined') {
23
+ (globalThis as any).indexedDB = {
24
+ open: (dbName: string) => {
25
+ const req: any = {};
26
+ setTimeout(() => {
27
+ const db = {
28
+ objectStoreNames: { contains: () => true },
29
+ transaction: (storeName: string) => ({
30
+ objectStore: (sName: string) => ({
31
+ get: (key: string) => {
32
+ const getReq: any = {};
33
+ setTimeout(() => {
34
+ const val = inMemoryStore.get(key);
35
+ getReq.result = val !== undefined ? { value: val } : undefined;
36
+ if (getReq.onsuccess) getReq.onsuccess({ target: getReq });
37
+ }, 0);
38
+ return getReq;
39
+ },
40
+ put: (datum: any) => {
41
+ const putReq: any = {};
42
+ setTimeout(() => {
43
+ inMemoryStore.set(datum.key, datum.value);
44
+ if (putReq.onsuccess) putReq.onsuccess({ target: putReq });
45
+ }, 0);
46
+ return putReq;
47
+ },
48
+ delete: (key: string) => {
49
+ const delReq: any = {};
50
+ setTimeout(() => {
51
+ inMemoryStore.delete(key);
52
+ if (delReq.onsuccess) delReq.onsuccess({ target: delReq });
53
+ }, 0);
54
+ return delReq;
55
+ }
56
+ })
57
+ }),
58
+ close: () => {}
59
+ };
60
+ req.result = db;
61
+ if (req.onsuccess) req.onsuccess({ target: req });
62
+ }, 0);
63
+ return req;
64
+ }
65
+ };
66
+ }
67
+
68
+ await respecfully(sir, 'Device Delegate Storage & Secret Lifecycle', async () => {
69
+
70
+ await ifWe(sir, 'getDeviceDelegateSecretKey constructs deterministic storage key', async () => {
71
+ const primaryTjpAddr = 'keystone^alice_tjp_12345';
72
+ const key = getDeviceDelegateSecretKey({ primaryTjpAddr });
73
+
74
+ iReckon(sir, key).willEqual(`${DEVICE_DELEGATE_SECRET_PREFIX}${primaryTjpAddr}`);
75
+ });
76
+
77
+ await ifWe(sir, 'setDeviceDelegateSecret and getDeviceDelegateSecret persist and retrieve secret', async () => {
78
+ const primaryTjpAddr = 'keystone^bob_tjp_999';
79
+ const secret = 'super-secret-512-token-abc';
80
+
81
+ await setDeviceDelegateSecret({ primaryTjpAddr, delegateSecret: secret });
82
+ const retrieved = await getDeviceDelegateSecret({ primaryTjpAddr });
83
+
84
+ iReckon(sir, retrieved).willEqual(secret);
85
+ });
86
+
87
+ await ifWe(sir, 'getOrCreateDeviceDelegateSecret generates high entropy token on first call and caches it', async () => {
88
+ const primaryTjpAddr = 'keystone^charlie_tjp_888';
89
+
90
+ const token1 = await getOrCreateDeviceDelegateSecret({ primaryTjpAddr, deviceTag: 'laptop' });
91
+ iReckon(sir, typeof token1 === 'string' && token1.length === 128).willEqual(true);
92
+
93
+ const token2 = await getOrCreateDeviceDelegateSecret({ primaryTjpAddr, deviceTag: 'laptop' });
94
+ iReckon(sir, token1).willEqual(token2);
95
+ });
96
+
97
+ await ifWe(sir, 'clearDeviceDelegateSecret removes stored secret', async () => {
98
+ const primaryTjpAddr = 'keystone^david_tjp_777';
99
+
100
+ await getOrCreateDeviceDelegateSecret({ primaryTjpAddr });
101
+ const beforeClear = await getDeviceDelegateSecret({ primaryTjpAddr });
102
+ iReckon(sir, !!beforeClear).willEqual(true);
103
+
104
+ await clearDeviceDelegateSecret({ primaryTjpAddr });
105
+ const afterClear = await getDeviceDelegateSecret({ primaryTjpAddr });
106
+ iReckon(sir, afterClear).willEqual(undefined);
107
+ });
108
+
109
+ await ifWe(sir, 'fails fast when global db or store name is uninitialized', async () => {
110
+ const primaryTjpAddr = 'keystone^failfast_tjp_000';
111
+ const savedDb = globalThisIbGib.dbName_hack;
112
+ globalThisIbGib.dbName_hack = undefined as any;
113
+
114
+ let threw = false;
115
+ try {
116
+ await getDeviceDelegateSecret({ primaryTjpAddr });
117
+ } catch (error) {
118
+ threw = true;
119
+ } finally {
120
+ globalThisIbGib.dbName_hack = savedDb;
121
+ }
122
+
123
+ iReckon(sir, threw).willEqual(true);
124
+ });
125
+ });
@@ -9,12 +9,15 @@ import { extractErrorMsg } from "@ibgib/helper-gib/dist/helpers/utils-helper.mjs
9
9
  import { getIbAndGib, getIbGibAddr } from "@ibgib/ts-gib/dist/helper.mjs";
10
10
  import { getGibInfo } from "@ibgib/ts-gib/dist/V1/transforms/transform-helper.mjs";
11
11
  import { KeystoneIbGib_V1 } from "@ibgib/core-gib/dist/keystone/keystone-types.mjs";
12
+ import { KeystoneService_V1 } from "@ibgib/core-gib/dist/keystone/keystone-service-v1.mjs";
12
13
  import { getTimelinesGroupedByTjp, getTjpAddr, toDto } from "@ibgib/core-gib/dist/common/other/ibgib-helper.mjs";
13
14
  import { updateSpecialIndex } from "@ibgib/core-gib/dist/timeline/timeline-api.mjs";
15
+ import { isDelegateExpired } from "@ibgib/core-gib/dist/keystone/delegate/delegate-helpers.mjs";
14
16
  import { getApiBridge } from "../api/ibgib-api-bridge.mjs";
15
17
  import { getGlobalMetaspace_waitIfNeeded } from "../helpers.mjs";
16
- import { EVENT_IBGIB_IDENTITY_UPDATE_AVAILABLE } from "../ui/ui-constants.mjs";
17
- import { EventIbGibIdentityUpdateAvailableDetail } from "../ui/ui-types.mjs";
18
+ import { getDeviceDelegateSecret } from "./device-delegate-helper.mjs";
19
+ import { EVENT_IBGIB_IDENTITY_UPDATE_AVAILABLE, EVENT_IBGIB_IDENTITY_RENEWAL_REQUIRED } from "../ui/ui-constants.mjs";
20
+ import { EventIbGibIdentityUpdateAvailableDetail, EventIbGibIdentityRenewalRequiredDetail } from "../ui/ui-types.mjs";
18
21
 
19
22
  export interface KeystoneUpdateCheckResult {
20
23
  hasUpdate: boolean;
@@ -37,6 +40,96 @@ export class KeystoneSyncService {
37
40
  }
38
41
  }
39
42
 
43
+ private dispatchRenewalRequiredEvent(detail: EventIbGibIdentityRenewalRequiredDetail): void {
44
+ if (typeof window !== 'undefined') {
45
+ window.dispatchEvent(new CustomEvent(EVENT_IBGIB_IDENTITY_RENEWAL_REQUIRED, {
46
+ detail,
47
+ bubbles: true,
48
+ composed: true,
49
+ }));
50
+ }
51
+ }
52
+
53
+ /**
54
+ * Retrieves the stored device delegate secret ($S_D$) for an active primary identity from IndexedDB.
55
+ */
56
+ public async getDeviceDelegateSecret({
57
+ primaryTjpAddr
58
+ }: {
59
+ primaryTjpAddr: string;
60
+ }): Promise<string | undefined> {
61
+ return getDeviceDelegateSecret({ primaryTjpAddr });
62
+ }
63
+
64
+ /**
65
+ * Checks if the active identity has a valid, unexpired sync delegate on this device.
66
+ */
67
+ public async checkDelegateStatus({
68
+ activePrimaryAddr,
69
+ metaspace,
70
+ space
71
+ }: {
72
+ activePrimaryAddr: string;
73
+ metaspace?: any;
74
+ space?: any;
75
+ }): Promise<{ isValid: boolean; reason?: 'expired' | 'missing_secret' }> {
76
+ const lc = `${this.lc}[${this.checkDelegateStatus.name}]`;
77
+ try {
78
+ if (!metaspace) metaspace = await getGlobalMetaspace_waitIfNeeded();
79
+ if (!metaspace) {
80
+ throw new Error(`${lc} (UNEXPECTED) metaspace falsy? (E: a1b2c3d4e5f60718293a4b5c6d7e8f90)`);
81
+ }
82
+ if (!space) space = await metaspace.getLocalUserSpace({ lock: false });
83
+ if (!space) {
84
+ throw new Error(`${lc} (UNEXPECTED) space falsy? (E: b2c3d4e5f60718293a4b5c6d7e8f90a1)`);
85
+ }
86
+
87
+ const info = getGibInfo({ ibGibAddr: activePrimaryAddr });
88
+ const { ib } = getIbAndGib({ ibGibAddr: activePrimaryAddr });
89
+ const primaryTjpAddr = info.tjpGib ? `${ib}^${info.tjpGib}` : activePrimaryAddr;
90
+
91
+ // 1. Check if local secret exists in IndexedDB
92
+ const secret = await getDeviceDelegateSecret({ primaryTjpAddr });
93
+ if (!secret) {
94
+ this.dispatchRenewalRequiredEvent({
95
+ activePrimaryAddr,
96
+ primaryTjpAddr,
97
+ reason: 'missing_secret'
98
+ });
99
+ return { isValid: false, reason: 'missing_secret' };
100
+ }
101
+
102
+ // 2. Check if primary keystone has registered delegates and if any are expired
103
+ const keystoneService = new KeystoneService_V1();
104
+ const keystone = await keystoneService.getLatestKeystone({
105
+ addr: activePrimaryAddr,
106
+ metaspace,
107
+ space
108
+ });
109
+ if (!keystone) {
110
+ throw new Error(`${lc} (UNEXPECTED) latest primary keystone not found for addr: ${activePrimaryAddr} (E: c3d4e5f60718293a4b5c6d7e8f90a1b2)`);
111
+ }
112
+
113
+ if (keystone?.data?.delegates) {
114
+ const delegates = Object.values(keystone.data.delegates);
115
+ const isAnyExpired = delegates.some(d => isDelegateExpired({ delegateInfo: d }));
116
+ if (isAnyExpired) {
117
+ this.dispatchRenewalRequiredEvent({
118
+ activePrimaryAddr,
119
+ primaryTjpAddr,
120
+ reason: 'expired'
121
+ });
122
+ return { isValid: false, reason: 'expired' };
123
+ }
124
+ }
125
+
126
+ return { isValid: true };
127
+ } catch (error) {
128
+ console.error(`${lc} ${extractErrorMsg(error)}`);
129
+ return { isValid: false };
130
+ }
131
+ }
132
+
40
133
  /**
41
134
  * Checks if a server update exists for the given active primary keystone address.
42
135
  */