@ibgib/node-gib 0.0.14 → 0.0.17

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 (218) hide show
  1. package/data/identity_index/email/hashes/32/13/49/e64f32730f01a61ada211f29eaf0a210fc2386b668ad04d7e8a9b16766.json +4 -0
  2. package/dist/email/email-helpers.d.mts.map +1 -1
  3. package/dist/email/email-helpers.mjs.map +1 -1
  4. package/dist/email/index.d.mts +3 -0
  5. package/dist/email/index.d.mts.map +1 -1
  6. package/dist/email/index.mjs +3 -0
  7. package/dist/email/index.mjs.map +1 -1
  8. package/dist/email/verify/email-verify-constants.d.mts +3 -0
  9. package/dist/email/verify/email-verify-constants.d.mts.map +1 -0
  10. package/dist/email/verify/email-verify-constants.mjs +3 -0
  11. package/dist/email/verify/email-verify-constants.mjs.map +1 -0
  12. package/dist/email/verify/email-verify-helpers.d.mts +107 -0
  13. package/dist/email/verify/email-verify-helpers.d.mts.map +1 -0
  14. package/dist/email/verify/email-verify-helpers.mjs +357 -0
  15. package/dist/email/verify/email-verify-helpers.mjs.map +1 -0
  16. package/dist/email/verify/email-verify-types.d.mts +41 -0
  17. package/dist/email/verify/email-verify-types.d.mts.map +1 -0
  18. package/dist/email/verify/email-verify-types.mjs +2 -0
  19. package/dist/email/verify/email-verify-types.mjs.map +1 -0
  20. package/dist/identity/sso/custodian-auth-helpers.d.mts +45 -0
  21. package/dist/identity/sso/custodian-auth-helpers.d.mts.map +1 -0
  22. package/dist/identity/sso/custodian-auth-helpers.mjs +108 -0
  23. package/dist/identity/sso/custodian-auth-helpers.mjs.map +1 -0
  24. package/dist/identity/sso/sso-config-helper.d.mts +7 -0
  25. package/dist/identity/sso/sso-config-helper.d.mts.map +1 -0
  26. package/dist/identity/sso/sso-config-helper.mjs +42 -0
  27. package/dist/identity/sso/sso-config-helper.mjs.map +1 -0
  28. package/dist/identity/sso/sso-custodian-service.d.mts +139 -0
  29. package/dist/identity/sso/sso-custodian-service.d.mts.map +1 -0
  30. package/dist/identity/sso/sso-custodian-service.mjs +471 -0
  31. package/dist/identity/sso/sso-custodian-service.mjs.map +1 -0
  32. package/dist/identity/sso/sso-types.d.mts +71 -0
  33. package/dist/identity/sso/sso-types.d.mts.map +1 -0
  34. package/dist/identity/sso/sso-types.mjs +7 -0
  35. package/dist/identity/sso/sso-types.mjs.map +1 -0
  36. package/dist/index.d.mts +5 -1
  37. package/dist/index.d.mts.map +1 -1
  38. package/dist/index.mjs +5 -1
  39. package/dist/index.mjs.map +1 -1
  40. package/dist/serve-gib/handlers/api/email/email-outbound.handler.d.mts.map +1 -1
  41. package/dist/serve-gib/handlers/api/email/email-outbound.handler.mjs +9 -2
  42. package/dist/serve-gib/handlers/api/email/email-outbound.handler.mjs.map +1 -1
  43. package/dist/serve-gib/handlers/api/email/email-verification-code.handler.d.mts +29 -0
  44. package/dist/serve-gib/handlers/api/email/email-verification-code.handler.d.mts.map +1 -0
  45. package/dist/serve-gib/handlers/api/email/email-verification-code.handler.mjs +149 -0
  46. package/dist/serve-gib/handlers/api/email/email-verification-code.handler.mjs.map +1 -0
  47. package/dist/serve-gib/handlers/api/email/email-verify-code-onetime.handler.d.mts +24 -0
  48. package/dist/serve-gib/handlers/api/email/email-verify-code-onetime.handler.d.mts.map +1 -0
  49. package/dist/serve-gib/handlers/api/email/email-verify-code-onetime.handler.mjs +212 -0
  50. package/dist/serve-gib/handlers/api/email/email-verify-code-onetime.handler.mjs.map +1 -0
  51. package/dist/serve-gib/handlers/api/identity/keystone-custodian-genesis.handler.d.mts +37 -0
  52. package/dist/serve-gib/handlers/api/identity/keystone-custodian-genesis.handler.d.mts.map +1 -0
  53. package/dist/serve-gib/handlers/api/identity/keystone-custodian-genesis.handler.mjs +192 -0
  54. package/dist/serve-gib/handlers/api/identity/keystone-custodian-genesis.handler.mjs.map +1 -0
  55. package/dist/serve-gib/handlers/api/identity/keystone-custodian-register-delegate.handler.d.mts +33 -0
  56. package/dist/serve-gib/handlers/api/identity/keystone-custodian-register-delegate.handler.d.mts.map +1 -0
  57. package/dist/serve-gib/handlers/api/identity/keystone-custodian-register-delegate.handler.mjs +173 -0
  58. package/dist/serve-gib/handlers/api/identity/keystone-custodian-register-delegate.handler.mjs.map +1 -0
  59. package/dist/serve-gib/handlers/api/keystone/keystone-check-email.handler.d.mts.map +1 -1
  60. package/dist/serve-gib/handlers/api/keystone/keystone-check-email.handler.mjs +2 -3
  61. package/dist/serve-gib/handlers/api/keystone/keystone-check-email.handler.mjs.map +1 -1
  62. package/dist/serve-gib/handlers/api/keystone/keystone-evolve.handler.d.mts.map +1 -1
  63. package/dist/serve-gib/handlers/api/keystone/keystone-evolve.handler.mjs +38 -3
  64. package/dist/serve-gib/handlers/api/keystone/keystone-evolve.handler.mjs.map +1 -1
  65. package/dist/serve-gib/handlers/api/keystone/keystone-genesis.handler.d.mts.map +1 -1
  66. package/dist/serve-gib/handlers/api/keystone/keystone-genesis.handler.mjs +54 -24
  67. package/dist/serve-gib/handlers/api/keystone/keystone-genesis.handler.mjs.map +1 -1
  68. package/dist/serve-gib/handlers/api/keystone/keystone-lookup.handler.d.mts.map +1 -1
  69. package/dist/serve-gib/handlers/api/keystone/keystone-lookup.handler.mjs +13 -13
  70. package/dist/serve-gib/handlers/api/keystone/keystone-lookup.handler.mjs.map +1 -1
  71. package/dist/serve-gib/handlers/api/keystone/keystone-post.handler.mjs +1 -1
  72. package/dist/serve-gib/handlers/api/keystone/keystone-post.handler.mjs.map +1 -1
  73. package/dist/serve-gib/handlers/api/keystone/sso-config.handler.mjs +3 -3
  74. package/dist/serve-gib/handlers/api/keystone/sso-config.handler.mjs.map +1 -1
  75. package/dist/serve-gib/handlers/api/keystone/sso-link.handler.d.mts.map +1 -1
  76. package/dist/serve-gib/handlers/api/keystone/sso-link.handler.mjs +28 -15
  77. package/dist/serve-gib/handlers/api/keystone/sso-link.handler.mjs.map +1 -1
  78. package/dist/serve-gib/handlers/api/keystone/sso-login.handler.d.mts +29 -15
  79. package/dist/serve-gib/handlers/api/keystone/sso-login.handler.d.mts.map +1 -1
  80. package/dist/serve-gib/handlers/api/keystone/sso-login.handler.mjs +105 -108
  81. package/dist/serve-gib/handlers/api/keystone/sso-login.handler.mjs.map +1 -1
  82. package/dist/serve-gib/identity-index/identity-index-constants.d.mts +3 -2
  83. package/dist/serve-gib/identity-index/identity-index-constants.d.mts.map +1 -1
  84. package/dist/serve-gib/identity-index/identity-index-constants.mjs +4 -2
  85. package/dist/serve-gib/identity-index/identity-index-constants.mjs.map +1 -1
  86. package/dist/serve-gib/identity-index/identity-index-helpers.d.mts.map +1 -1
  87. package/dist/serve-gib/identity-index/identity-index-helpers.mjs +28 -11
  88. package/dist/serve-gib/identity-index/identity-index-helpers.mjs.map +1 -1
  89. package/dist/serve-gib/identity-index/identity-index-service.d.mts +20 -3
  90. package/dist/serve-gib/identity-index/identity-index-service.d.mts.map +1 -1
  91. package/dist/serve-gib/identity-index/identity-index-service.mjs +134 -18
  92. package/dist/serve-gib/identity-index/identity-index-service.mjs.map +1 -1
  93. package/dist/serve-gib/identity-index/identity-index-types.d.mts +4 -2
  94. package/dist/serve-gib/identity-index/identity-index-types.d.mts.map +1 -1
  95. package/dist/serve-gib/index.d.mts +4 -0
  96. package/dist/serve-gib/index.d.mts.map +1 -1
  97. package/dist/serve-gib/index.mjs +12 -0
  98. package/dist/serve-gib/index.mjs.map +1 -1
  99. package/dist/serve-gib/path-constants.d.mts +17 -0
  100. package/dist/serve-gib/path-constants.d.mts.map +1 -1
  101. package/dist/serve-gib/path-constants.mjs +17 -0
  102. package/dist/serve-gib/path-constants.mjs.map +1 -1
  103. package/e2e/identity-custodian-lifecycle.e2e.md +93 -0
  104. package/e2e/identity-sso-lifecycle.e2e.md +132 -0
  105. package/package.json +5 -5
  106. package/src/email/email-helpers.mts +0 -1
  107. package/src/email/index.mts +3 -0
  108. package/src/email/verify/email-verify-constants.mts +3 -0
  109. package/src/email/verify/email-verify-helpers.mts +466 -0
  110. package/src/email/verify/email-verify-types.mts +47 -0
  111. package/src/identity/sso/custodian-auth-helpers.mts +146 -0
  112. package/src/identity/sso/custodian-auth-helpers.respec.mts +97 -0
  113. package/src/identity/sso/sso-config-helper.mts +52 -0
  114. package/src/identity/sso/sso-custodian-service.mts +566 -0
  115. package/src/identity/sso/sso-custodian-service.respec.mts +297 -0
  116. package/src/identity/sso/sso-types.mts +80 -0
  117. package/src/index.mts +14 -0
  118. package/src/serve-gib/handlers/api/email/email-outbound.handler.mts +8 -2
  119. package/src/serve-gib/handlers/api/email/email-verification-code.handler.mts +163 -0
  120. package/src/serve-gib/handlers/api/email/email-verify-code-onetime.handler.mts +231 -0
  121. package/src/serve-gib/handlers/api/email/email-verify.respec.mts +183 -0
  122. package/src/serve-gib/handlers/api/identity/keystone-custodian-genesis.handler.mts +233 -0
  123. package/src/serve-gib/handlers/api/identity/keystone-custodian-genesis.respec.mts +93 -0
  124. package/src/serve-gib/handlers/api/identity/keystone-custodian-register-delegate.handler.mts +210 -0
  125. package/src/serve-gib/handlers/api/identity/keystone-custodian-register-delegate.respec.mts +112 -0
  126. package/src/serve-gib/handlers/api/keystone/keystone-check-email.handler.mts +2 -4
  127. package/src/serve-gib/handlers/api/keystone/keystone-evolve.handler.mts +42 -3
  128. package/src/serve-gib/handlers/api/keystone/keystone-genesis.handler.mts +46 -23
  129. package/src/serve-gib/handlers/api/keystone/keystone-lookup.handler.mts +11 -15
  130. package/src/serve-gib/handlers/api/keystone/keystone-post.handler.mts +1 -1
  131. package/src/serve-gib/handlers/api/keystone/sso-config.handler.mts +3 -3
  132. package/src/serve-gib/handlers/api/keystone/sso-link.handler.mts +29 -17
  133. package/src/serve-gib/handlers/api/keystone/sso-login.handler.mts +132 -125
  134. package/src/serve-gib/identity-index/identity-index-constants.mts +5 -2
  135. package/src/serve-gib/identity-index/identity-index-helpers.mts +26 -12
  136. package/src/serve-gib/identity-index/identity-index-service.mts +133 -16
  137. package/src/serve-gib/identity-index/identity-index-service.respec.mts +1 -1
  138. package/src/serve-gib/identity-index/identity-index-types.mts +4 -2
  139. package/src/serve-gib/index.mts +12 -0
  140. package/src/serve-gib/path-constants.mts +20 -0
  141. package/tsconfig.json +2 -2
  142. package/tsconfig.test.json +1 -1
  143. package/dist/assumptions.respec.d.mts +0 -2
  144. package/dist/assumptions.respec.d.mts.map +0 -1
  145. package/dist/assumptions.respec.mjs +0 -41
  146. package/dist/assumptions.respec.mjs.map +0 -1
  147. package/dist/email/email-service.respec.d.mts +0 -2
  148. package/dist/email/email-service.respec.d.mts.map +0 -1
  149. package/dist/email/email-service.respec.mjs +0 -115
  150. package/dist/email/email-service.respec.mjs.map +0 -1
  151. package/dist/serve-gib/bootstrap-helper.respec.d.mts +0 -2
  152. package/dist/serve-gib/bootstrap-helper.respec.d.mts.map +0 -1
  153. package/dist/serve-gib/bootstrap-helper.respec.mjs +0 -85
  154. package/dist/serve-gib/bootstrap-helper.respec.mjs.map +0 -1
  155. package/dist/serve-gib/handlers/api/health.respec.d.mts +0 -2
  156. package/dist/serve-gib/handlers/api/health.respec.d.mts.map +0 -1
  157. package/dist/serve-gib/handlers/api/health.respec.mjs +0 -47
  158. package/dist/serve-gib/handlers/api/health.respec.mjs.map +0 -1
  159. package/dist/serve-gib/handlers/api/keystone/keystone-get.respec.d.mts +0 -2
  160. package/dist/serve-gib/handlers/api/keystone/keystone-get.respec.d.mts.map +0 -1
  161. package/dist/serve-gib/handlers/api/keystone/keystone-get.respec.mjs +0 -98
  162. package/dist/serve-gib/handlers/api/keystone/keystone-get.respec.mjs.map +0 -1
  163. package/dist/serve-gib/handlers/api/keystone/keystone-post.respec.d.mts +0 -2
  164. package/dist/serve-gib/handlers/api/keystone/keystone-post.respec.d.mts.map +0 -1
  165. package/dist/serve-gib/handlers/api/keystone/keystone-post.respec.mjs +0 -131
  166. package/dist/serve-gib/handlers/api/keystone/keystone-post.respec.mjs.map +0 -1
  167. package/dist/serve-gib/identity-index/identity-index-service.respec.d.mts +0 -2
  168. package/dist/serve-gib/identity-index/identity-index-service.respec.d.mts.map +0 -1
  169. package/dist/serve-gib/identity-index/identity-index-service.respec.mjs +0 -109
  170. package/dist/serve-gib/identity-index/identity-index-service.respec.mjs.map +0 -1
  171. package/dist/serve-gib/keystone-schema-helpers.respec.d.mts +0 -2
  172. package/dist/serve-gib/keystone-schema-helpers.respec.d.mts.map +0 -1
  173. package/dist/serve-gib/keystone-schema-helpers.respec.mjs +0 -68
  174. package/dist/serve-gib/keystone-schema-helpers.respec.mjs.map +0 -1
  175. package/dist/serve-gib/path-helper.respec.d.mts +0 -2
  176. package/dist/serve-gib/path-helper.respec.d.mts.map +0 -1
  177. package/dist/serve-gib/path-helper.respec.mjs +0 -83
  178. package/dist/serve-gib/path-helper.respec.mjs.map +0 -1
  179. package/dist/serve-gib/serve-gib.respec.d.mts +0 -2
  180. package/dist/serve-gib/serve-gib.respec.d.mts.map +0 -1
  181. package/dist/serve-gib/serve-gib.respec.mjs +0 -85
  182. package/dist/serve-gib/serve-gib.respec.mjs.map +0 -1
  183. package/dist/spec-helper.node.respec.d.mts +0 -13
  184. package/dist/spec-helper.node.respec.d.mts.map +0 -1
  185. package/dist/spec-helper.node.respec.mjs +0 -50
  186. package/dist/spec-helper.node.respec.mjs.map +0 -1
  187. package/dist/witness/space/node-filesystem-space/node-indexed-filesystem-space/respec/testSpace_createAndInit.node-indexed-filesystem-space-v1.respec.d.mts +0 -2
  188. package/dist/witness/space/node-filesystem-space/node-indexed-filesystem-space/respec/testSpace_createAndInit.node-indexed-filesystem-space-v1.respec.d.mts.map +0 -1
  189. package/dist/witness/space/node-filesystem-space/node-indexed-filesystem-space/respec/testSpace_createAndInit.node-indexed-filesystem-space-v1.respec.mjs +0 -52
  190. package/dist/witness/space/node-filesystem-space/node-indexed-filesystem-space/respec/testSpace_createAndInit.node-indexed-filesystem-space-v1.respec.mjs.map +0 -1
  191. package/dist/witness/space/node-filesystem-space/node-indexed-filesystem-space/respec/testSpace_persistTransformResult.node-indexed-filesystem-space-v1.respec.d.mts +0 -2
  192. package/dist/witness/space/node-filesystem-space/node-indexed-filesystem-space/respec/testSpace_persistTransformResult.node-indexed-filesystem-space-v1.respec.d.mts.map +0 -1
  193. package/dist/witness/space/node-filesystem-space/node-indexed-filesystem-space/respec/testSpace_persistTransformResult.node-indexed-filesystem-space-v1.respec.mjs +0 -53
  194. package/dist/witness/space/node-filesystem-space/node-indexed-filesystem-space/respec/testSpace_persistTransformResult.node-indexed-filesystem-space-v1.respec.mjs.map +0 -1
  195. package/dist/witness/space/node-filesystem-space/node-indexed-filesystem-space/respec/testSpace_putGetDelete.node-indexed-filesystem-space-v1.respec.d.mts +0 -2
  196. package/dist/witness/space/node-filesystem-space/node-indexed-filesystem-space/respec/testSpace_putGetDelete.node-indexed-filesystem-space-v1.respec.d.mts.map +0 -1
  197. package/dist/witness/space/node-filesystem-space/node-indexed-filesystem-space/respec/testSpace_putGetDelete.node-indexed-filesystem-space-v1.respec.mjs +0 -59
  198. package/dist/witness/space/node-filesystem-space/node-indexed-filesystem-space/respec/testSpace_putGetDelete.node-indexed-filesystem-space-v1.respec.mjs.map +0 -1
  199. package/dist/witness/space/node-filesystem-space/node-indexed-filesystem-space/respec/testSpace_registerNewIbGib_GetLatest.node-indexed-filesystem-space-v1.respec.d.mts +0 -2
  200. package/dist/witness/space/node-filesystem-space/node-indexed-filesystem-space/respec/testSpace_registerNewIbGib_GetLatest.node-indexed-filesystem-space-v1.respec.d.mts.map +0 -1
  201. package/dist/witness/space/node-filesystem-space/node-indexed-filesystem-space/respec/testSpace_registerNewIbGib_GetLatest.node-indexed-filesystem-space-v1.respec.mjs +0 -55
  202. package/dist/witness/space/node-filesystem-space/node-indexed-filesystem-space/respec/testSpace_registerNewIbGib_GetLatest.node-indexed-filesystem-space-v1.respec.mjs.map +0 -1
  203. package/dist/witness/space/node-filesystem-space/respec/testSpace_createAndInit.node-filesystem-space-v1.respec.d.mts +0 -2
  204. package/dist/witness/space/node-filesystem-space/respec/testSpace_createAndInit.node-filesystem-space-v1.respec.d.mts.map +0 -1
  205. package/dist/witness/space/node-filesystem-space/respec/testSpace_createAndInit.node-filesystem-space-v1.respec.mjs +0 -67
  206. package/dist/witness/space/node-filesystem-space/respec/testSpace_createAndInit.node-filesystem-space-v1.respec.mjs.map +0 -1
  207. package/dist/witness/space/node-filesystem-space/respec/testSpace_persistTransformResult.node-filesystem-space-v1.respec.d.mts +0 -2
  208. package/dist/witness/space/node-filesystem-space/respec/testSpace_persistTransformResult.node-filesystem-space-v1.respec.d.mts.map +0 -1
  209. package/dist/witness/space/node-filesystem-space/respec/testSpace_persistTransformResult.node-filesystem-space-v1.respec.mjs +0 -67
  210. package/dist/witness/space/node-filesystem-space/respec/testSpace_persistTransformResult.node-filesystem-space-v1.respec.mjs.map +0 -1
  211. package/dist/witness/space/node-filesystem-space/respec/testSpace_putGetDelete.node-filesystem-space-v1.respec.d.mts +0 -2
  212. package/dist/witness/space/node-filesystem-space/respec/testSpace_putGetDelete.node-filesystem-space-v1.respec.d.mts.map +0 -1
  213. package/dist/witness/space/node-filesystem-space/respec/testSpace_putGetDelete.node-filesystem-space-v1.respec.mjs +0 -68
  214. package/dist/witness/space/node-filesystem-space/respec/testSpace_putGetDelete.node-filesystem-space-v1.respec.mjs.map +0 -1
  215. package/dist/witness/space/node-filesystem-space/respec/testSpace_registerNewIbGib_GetLatest.node-filesystem-space-v1.respec.d.mts +0 -2
  216. package/dist/witness/space/node-filesystem-space/respec/testSpace_registerNewIbGib_GetLatest.node-filesystem-space-v1.respec.d.mts.map +0 -1
  217. package/dist/witness/space/node-filesystem-space/respec/testSpace_registerNewIbGib_GetLatest.node-filesystem-space-v1.respec.mjs +0 -69
  218. package/dist/witness/space/node-filesystem-space/respec/testSpace_registerNewIbGib_GetLatest.node-filesystem-space-v1.respec.mjs.map +0 -1
@@ -1,30 +1,81 @@
1
1
  import * as fs from 'fs/promises';
2
- import { DEFAULT_IDENTITY_INDEX_SALT } from './identity-index-constants.mjs';
2
+ import * as path from 'path';
3
+ import { extractErrorMsg, pretty } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
4
+ import { GLOBAL_LOG_A_LOT } from '../server-constants.mjs';
5
+ import { DEFAULT_IDENTITY_INDEX_SALT, DEFAULT_IDENTITY_INDEX_DIR_NAME } from './identity-index-constants.mjs';
3
6
  import { getIdentityEmailHash, getShardedIndexPath } from './identity-index-helpers.mjs';
7
+ const logalot = GLOBAL_LOG_A_LOT || true;
4
8
  /**
5
9
  * Service managing atomic, sharded identity index files for backwards email -> primary identity tjpAddr lookups.
6
10
  */
7
11
  export class IdentityIndexService {
12
+ lc = `[${IdentityIndexService.name}]`;
8
13
  baseDir;
9
14
  salt;
10
- constructor({ baseDir, salt }) {
11
- if (!baseDir) {
12
- throw new Error('baseDir must be provided to IdentityIndexService.');
13
- }
14
- this.baseDir = baseDir;
15
+ constructor(options) {
16
+ const { baseDir, dataDir, salt } = options ?? {};
17
+ const finalDataDir = dataDir || process.env.DATA_DIR || 'data';
18
+ this.baseDir = baseDir || process.env.IDENTITY_INDEX_BASE_DIR || path.join(finalDataDir, DEFAULT_IDENTITY_INDEX_DIR_NAME);
15
19
  this.salt = salt || process.env.IDENTITY_INDEX_SALT || DEFAULT_IDENTITY_INDEX_SALT;
16
20
  }
21
+ // /**
22
+ // * Static helper to register an email index.
23
+ // * @deprecated Use `getIdentityIndexService().registerEmailIndex(...)` instead.
24
+ // */
25
+ // static async registerEmailIndex(opts: {
26
+ // email: string;
27
+ // primaryTjpAddr: IbGibAddr;
28
+ // dataDir?: string;
29
+ // baseDir?: string;
30
+ // salt?: string;
31
+ // }): Promise<RegisterEmailIndexResult> {
32
+ // return getIdentityIndexService().registerEmailIndex({
33
+ // email: opts.email,
34
+ // primaryTjpAddr: opts.primaryTjpAddr
35
+ // });
36
+ // }
37
+ // /**
38
+ // * Static helper to lookup an identity record by email address.
39
+ // * @deprecated Use `getIdentityIndexService().lookupIdentityByEmail(...)` instead.
40
+ // */
41
+ // static async lookupIdentityByEmail(opts: {
42
+ // email: string;
43
+ // dataDir?: string;
44
+ // baseDir?: string;
45
+ // salt?: string;
46
+ // }): Promise<{ primaryTjpAddr: IbGibAddr; tjpAddr: IbGibAddr; createdAt: number } | undefined> {
47
+ // return getIdentityIndexService().lookupIdentityByEmail({ email: opts.email });
48
+ // }
49
+ // /**
50
+ // * Static helper to unregister an email index.
51
+ // * @deprecated Use `getIdentityIndexService().unregisterEmailIndex(...)` instead.
52
+ // */
53
+ // static async unregisterEmailIndex(opts: {
54
+ // email: string;
55
+ // dataDir?: string;
56
+ // baseDir?: string;
57
+ // salt?: string;
58
+ // }): Promise<boolean> {
59
+ // return getIdentityIndexService().unregisterEmailIndex({ email: opts.email });
60
+ // }
17
61
  /**
18
62
  * Registers an email to a primary identity tjpAddr.
19
63
  * Uses atomic OS file creation (`flag: 'wx'`) to guarantee single-server ACID uniqueness.
20
64
  * Throws `duplicate_identity_409` error if email is already registered.
21
65
  */
22
- async registerEmailIndex({ email, tjpAddr, }) {
66
+ async registerEmailIndex({ email, tjpAddr, primaryTjpAddr, }) {
67
+ const targetAddr = tjpAddr || primaryTjpAddr;
68
+ if (!targetAddr) {
69
+ throw new Error('Either tjpAddr or primaryTjpAddr must be provided. (E: 62f15851b9a8c8d718279ab84e426826)');
70
+ }
23
71
  const emailHash = await getIdentityEmailHash({ email, salt: this.salt });
24
- const { folderPath, filePath } = getShardedIndexPath({ baseDir: this.baseDir, emailHash });
72
+ const { folderPath, filePath } = getShardedIndexPath({
73
+ baseDir: this.baseDir,
74
+ emailHash
75
+ });
25
76
  await fs.mkdir(folderPath, { recursive: true });
26
77
  const record = {
27
- tjpAddr,
78
+ tjpAddr: targetAddr,
28
79
  createdAt: Date.now(),
29
80
  };
30
81
  try {
@@ -38,31 +89,86 @@ export class IdentityIndexService {
38
89
  throw error;
39
90
  }
40
91
  }
92
+ /**
93
+ * Retrieves the registered identity info for an email address.
94
+ * Returns `undefined` if email is not indexed.
95
+ */
96
+ async lookupIdentityByEmail({ email, }) {
97
+ const record = await this.getEmailIndex({ email });
98
+ if (!record) {
99
+ return undefined;
100
+ }
101
+ return {
102
+ primaryTjpAddr: record.tjpAddr,
103
+ tjpAddr: record.tjpAddr,
104
+ createdAt: record.createdAt,
105
+ };
106
+ }
41
107
  /**
42
108
  * Retrieves the registered `IdentityIndexRecord` for an email address.
43
109
  * Returns `undefined` if email is not indexed.
44
110
  */
45
111
  async getEmailIndex({ email, }) {
46
- const emailHash = await getIdentityEmailHash({ email, salt: this.salt });
47
- return this.getEmailIndexByHash({ emailHash });
112
+ const lc = `${this.lc}[${this.getEmailIndex.name}]`;
113
+ try {
114
+ if (logalot) {
115
+ console.log(`${lc} starting... (I: 3cd3e8e7bd88e193668a8d842d326826)`);
116
+ }
117
+ const emailHash = await getIdentityEmailHash({ email, salt: this.salt });
118
+ if (logalot) {
119
+ console.log(`${lc} emailHash: ${emailHash} (I: cae3161784e8eb00e5c6128a17aadf26)`);
120
+ }
121
+ const emailIndex = this.getEmailIndexByHash({ emailHash });
122
+ if (logalot) {
123
+ console.log(`${lc} emailIndex: ${emailIndex ? pretty(emailIndex) : 'undefined'} (I: dce1a8387affbd99c85f970853eac826)`);
124
+ }
125
+ return emailIndex;
126
+ }
127
+ catch (error) {
128
+ console.error(`${lc} ${extractErrorMsg(error)}`);
129
+ throw error;
130
+ }
131
+ finally {
132
+ if (logalot) {
133
+ console.log(`${lc} complete.`);
134
+ }
135
+ }
48
136
  }
49
137
  /**
50
138
  * Retrieves the registered `IdentityIndexRecord` directly by `emailHash`.
51
139
  * Returns `undefined` if hash file does not exist.
52
140
  */
53
141
  async getEmailIndexByHash({ emailHash, }) {
54
- const { filePath } = getShardedIndexPath({ baseDir: this.baseDir, emailHash });
142
+ const lc = `${this.lc}[${this.getEmailIndexByHash.name}]`;
55
143
  try {
56
- const content = await fs.readFile(filePath, 'utf8');
57
- const record = JSON.parse(content);
58
- return record;
144
+ if (logalot) {
145
+ console.log(`${lc} starting... (I: 206328babd08908ad876fd69a4b37826)`);
146
+ }
147
+ const { filePath } = getShardedIndexPath({ baseDir: this.baseDir, emailHash });
148
+ if (logalot) {
149
+ console.log(`${lc} filePath: ${filePath} (I: e8f318aabc06320db8b0c3c8b34c5926)`);
150
+ }
151
+ try {
152
+ const content = await fs.readFile(filePath, 'utf8');
153
+ const record = JSON.parse(content);
154
+ return record;
155
+ }
156
+ catch (error) {
157
+ if (error.code === 'ENOENT') {
158
+ return undefined;
159
+ }
160
+ throw error;
161
+ }
59
162
  }
60
163
  catch (error) {
61
- if (error.code === 'ENOENT') {
62
- return undefined;
63
- }
164
+ console.error(`${lc} ${extractErrorMsg(error)}`);
64
165
  throw error;
65
166
  }
167
+ finally {
168
+ if (logalot) {
169
+ console.log(`${lc} complete.`);
170
+ }
171
+ }
66
172
  }
67
173
  /**
68
174
  * Unindexes an email address (deletes the index JSON file).
@@ -83,4 +189,14 @@ export class IdentityIndexService {
83
189
  }
84
190
  }
85
191
  }
192
+ let _identityIndexService;
193
+ /**
194
+ * Singleton factory getter for the IdentityIndexService.
195
+ */
196
+ export function getIdentityIndexService() {
197
+ if (!_identityIndexService) {
198
+ _identityIndexService = new IdentityIndexService();
199
+ }
200
+ return _identityIndexService;
201
+ }
86
202
  //# sourceMappingURL=identity-index-service.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"identity-index-service.mjs","sourceRoot":"","sources":["../../../src/serve-gib/identity-index/identity-index-service.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"identity-index-service.mjs","sourceRoot":"","sources":["../../../src/serve-gib/identity-index/identity-index-service.mts"],"names":[],"mappings":"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"}
@@ -12,8 +12,10 @@ export interface IdentityIndexRecord {
12
12
  * Configuration options for initializing IdentityIndexService.
13
13
  */
14
14
  export interface IdentityIndexServiceOptions {
15
- /** Base directory where index shards will be stored (e.g. `data/index`). */
16
- baseDir: string;
15
+ /** Base directory where index shards will be stored (e.g. `data/identity_index`). */
16
+ baseDir?: string;
17
+ /** Server root data directory (e.g. `data`). If baseDir is omitted, `baseDir` defaults to `path.join(dataDir, DEFAULT_IDENTITY_INDEX_DIR_NAME)`. */
18
+ dataDir?: string;
17
19
  /** Server salt for privacy email hashing. Defaults to `DEFAULT_IDENTITY_INDEX_SALT`. */
18
20
  salt?: string;
19
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"identity-index-types.d.mts","sourceRoot":"","sources":["../../../src/serve-gib/identity-index/identity-index-types.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,6CAA6C;IAC7C,OAAO,EAAE,SAAS,CAAC;IACnB,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IACxC,4EAA4E;IAC5E,OAAO,EAAE,MAAM,CAAC;IAChB,wFAAwF;IACxF,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACrC,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,MAAM,EAAE,mBAAmB,CAAC;CAC/B"}
1
+ {"version":3,"file":"identity-index-types.d.mts","sourceRoot":"","sources":["../../../src/serve-gib/identity-index/identity-index-types.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,6CAA6C;IAC7C,OAAO,EAAE,SAAS,CAAC;IACnB,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IACxC,qFAAqF;IACrF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oJAAoJ;IACpJ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wFAAwF;IACxF,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACrC,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,MAAM,EAAE,mBAAmB,CAAC;CAC/B"}
@@ -31,8 +31,12 @@ export * from './handlers/api/keystone/keystone-check-email.handler.mjs';
31
31
  export * from './handlers/api/keystone/sso-config.handler.mjs';
32
32
  export * from './handlers/api/keystone/sso-link.handler.mjs';
33
33
  export * from './handlers/api/keystone/sso-login.handler.mjs';
34
+ export * from './handlers/api/identity/keystone-custodian-genesis.handler.mjs';
35
+ export * from './handlers/api/identity/keystone-custodian-register-delegate.handler.mjs';
34
36
  export * from './handlers/api/email/email-inbound.handler.mjs';
35
37
  export * from './handlers/api/email/email-outbound.handler.mjs';
38
+ export * from './handlers/api/email/email-verification-code.handler.mjs';
39
+ export * from './handlers/api/email/email-verify-code-onetime.handler.mjs';
36
40
  export * from './handlers/api/debug/ws-echo.handler.mjs';
37
41
  export * from './handlers/ws/ws-types.mjs';
38
42
  export * from './handlers/ws/ws-helper.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/serve-gib/index.mts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,6CAA6C,CAAC;AAG5D,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,wCAAwC,CAAC;AACvD,cAAc,oDAAoD,CAAC;AACnE,cAAc,sDAAsD,CAAC;AACrE,cAAc,qDAAqD,CAAC;AACpE,cAAc,mDAAmD,CAAC;AAClE,cAAc,kDAAkD,CAAC;AACjE,cAAc,qDAAqD,CAAC;AACpE,cAAc,0DAA0D,CAAC;AACzE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,iDAAiD,CAAC;AAChE,cAAc,0CAA0C,CAAC;AACzD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6CAA6C,CAAC;AAC5D,cAAc,wCAAwC,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAgB9C,MAAM,WAAW,uBAAuB;IACpC,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,GAAE,uBAA4B,GAAG,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAsB3G"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/serve-gib/index.mts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,6CAA6C,CAAC;AAG5D,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,wCAAwC,CAAC;AACvD,cAAc,oDAAoD,CAAC;AACnE,cAAc,sDAAsD,CAAC;AACrE,cAAc,qDAAqD,CAAC;AACpE,cAAc,mDAAmD,CAAC;AAClE,cAAc,kDAAkD,CAAC;AACjE,cAAc,qDAAqD,CAAC;AACpE,cAAc,0DAA0D,CAAC;AACzE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,gEAAgE,CAAC;AAC/E,cAAc,0EAA0E,CAAC;AACzF,cAAc,gDAAgD,CAAC;AAC/D,cAAc,iDAAiD,CAAC;AAChE,cAAc,0DAA0D,CAAC;AACzE,cAAc,4DAA4D,CAAC;AAC3E,cAAc,0CAA0C,CAAC;AACzD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6CAA6C,CAAC;AAC5D,cAAc,wCAAwC,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAoB9C,MAAM,WAAW,uBAAuB;IACpC,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,GAAE,uBAA4B,GAAG,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CA0B3G"}
@@ -32,8 +32,12 @@ export * from './handlers/api/keystone/keystone-check-email.handler.mjs';
32
32
  export * from './handlers/api/keystone/sso-config.handler.mjs';
33
33
  export * from './handlers/api/keystone/sso-link.handler.mjs';
34
34
  export * from './handlers/api/keystone/sso-login.handler.mjs';
35
+ export * from './handlers/api/identity/keystone-custodian-genesis.handler.mjs';
36
+ export * from './handlers/api/identity/keystone-custodian-register-delegate.handler.mjs';
35
37
  export * from './handlers/api/email/email-inbound.handler.mjs';
36
38
  export * from './handlers/api/email/email-outbound.handler.mjs';
39
+ export * from './handlers/api/email/email-verification-code.handler.mjs';
40
+ export * from './handlers/api/email/email-verify-code-onetime.handler.mjs';
37
41
  export * from './handlers/api/debug/ws-echo.handler.mjs';
38
42
  export * from './handlers/ws/ws-types.mjs';
39
43
  export * from './handlers/ws/ws-helper.mjs';
@@ -50,8 +54,12 @@ import { KeystoneCheckEmailHandler } from './handlers/api/keystone/keystone-chec
50
54
  import { SsoLinkHandler } from './handlers/api/keystone/sso-link.handler.mjs';
51
55
  import { SsoLoginHandler } from './handlers/api/keystone/sso-login.handler.mjs';
52
56
  import { SsoConfigHandler } from './handlers/api/keystone/sso-config.handler.mjs';
57
+ import { KeystoneCustodianGenesisHandler } from './handlers/api/identity/keystone-custodian-genesis.handler.mjs';
58
+ import { KeystoneCustodianRegisterDelegateHandler } from './handlers/api/identity/keystone-custodian-register-delegate.handler.mjs';
53
59
  import { EmailInboundHandler } from './handlers/api/email/email-inbound.handler.mjs';
54
60
  import { EmailOutboundHandler } from './handlers/api/email/email-outbound.handler.mjs';
61
+ import { EmailVerificationCodeHandler } from './handlers/api/email/email-verification-code.handler.mjs';
62
+ import { EmailVerifyCodeOnetimeHandler } from './handlers/api/email/email-verify-code-onetime.handler.mjs';
55
63
  import { StaticFileHandler } from './handlers/static-handler.mjs';
56
64
  /**
57
65
  * Returns the standard pipeline array of ibgib HTTP request handlers for serve-gib.
@@ -69,8 +77,12 @@ export function getStandardServeGibHandlers(opts = {}) {
69
77
  new SsoLinkHandler(),
70
78
  new SsoLoginHandler(),
71
79
  new SsoConfigHandler(),
80
+ new KeystoneCustodianGenesisHandler(),
81
+ new KeystoneCustodianRegisterDelegateHandler(),
72
82
  new EmailInboundHandler(),
73
83
  new EmailOutboundHandler(),
84
+ new EmailVerificationCodeHandler(),
85
+ new EmailVerifyCodeOnetimeHandler(),
74
86
  ];
75
87
  if (opts.clientDir) {
76
88
  handlers.push(new StaticFileHandler(opts.clientDir));
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/serve-gib/index.mts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,6CAA6C,CAAC;AAE5D,WAAW;AACX,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,wCAAwC,CAAC;AACvD,cAAc,oDAAoD,CAAC;AACnE,cAAc,sDAAsD,CAAC;AACrE,cAAc,qDAAqD,CAAC;AACpE,cAAc,mDAAmD,CAAC;AAClE,cAAc,kDAAkD,CAAC;AACjE,cAAc,qDAAqD,CAAC;AACpE,cAAc,0DAA0D,CAAC;AACzE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,iDAAiD,CAAC;AAChE,cAAc,0CAA0C,CAAC;AACzD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6CAA6C,CAAC;AAC5D,cAAc,wCAAwC,CAAC;AAGvD,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sDAAsD,CAAC;AAC9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,MAAM,mDAAmD,CAAC;AACxF,OAAO,EAAE,kBAAkB,EAAE,MAAM,kDAAkD,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AAC5F,OAAO,EAAE,yBAAyB,EAAE,MAAM,0DAA0D,CAAC;AACrG,OAAO,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,+CAA+C,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,gDAAgD,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAOlE;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAAI,GAA4B,EAAE;IAC1E,MAAM,QAAQ,GAAgC;QAC1C,IAAI,aAAa,EAAE;QACnB,IAAI,YAAY,EAAE;QAClB,IAAI,sBAAsB,EAAE;QAC5B,IAAI,qBAAqB,EAAE;QAC3B,IAAI,mBAAmB,EAAE;QACzB,IAAI,kBAAkB,EAAE;QACxB,IAAI,qBAAqB,EAAE;QAC3B,IAAI,yBAAyB,EAAE;QAC/B,IAAI,cAAc,EAAE;QACpB,IAAI,eAAe,EAAE;QACrB,IAAI,gBAAgB,EAAE;QACtB,IAAI,mBAAmB,EAAE;QACzB,IAAI,oBAAoB,EAAE;KAC7B,CAAC;IAEF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/serve-gib/index.mts"],"names":[],"mappings":"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"}
@@ -97,6 +97,23 @@ export declare const API_PATH_REGEXES: {
97
97
  * /api/email/send
98
98
  */
99
99
  EMAIL_SEND: RegExp;
100
+ /**
101
+ * /api/email/verification-code
102
+ */
103
+ EMAIL_VERIFICATION_CODE: RegExp;
104
+ /**
105
+ * /api/email/verify or /api/email/verify-code
106
+ */
107
+ EMAIL_VERIFY: RegExp;
108
+ EMAIL_VERIFY_CODE: RegExp;
109
+ /**
110
+ * /api/identity/custodian/genesis
111
+ */
112
+ KEYSTONE_CUSTODIAN_GENESIS: RegExp;
113
+ /**
114
+ * /api/identity/custodian/register-delegate
115
+ */
116
+ KEYSTONE_CUSTODIAN_REGISTER_DELEGATE: RegExp;
100
117
  };
101
118
  export declare const VALID_STATIC_PATH_REGEX: RegExp;
102
119
  //# sourceMappingURL=path-constants.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"path-constants.d.mts","sourceRoot":"","sources":["../../src/serve-gib/path-constants.mts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC;;;GAGG;AACH,eAAO,MAAM,kBAAkB,UAK9B,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB;IACzB;;OAEG;IACH,MAAM;IAEN;;OAEG;IACH,WAAW;IAEX;;OAEG;IACH,UAAU;IAEV;;OAEG;IACH,QAAQ;IAER;;OAEG;IACH,aAAa;IAEb;;OAEG;IACH,UAAU;IAEV;;OAEG;IACH,eAAe;IAEf;;;;;;;;OAQG;IACH,gBAAgB;IAEhB;;OAEG;IACH,eAAe;IAEf;;OAEG;IACH,oBAAoB;IAEpB;;;;;;;;;;;OAWG;IACH,aAAa;IACb;;OAEG;IACH,OAAO;IACP;;OAEG;IACH,iBAAiB;IACjB;;OAEG;IACH,kBAAkB;IAClB;;OAEG;IACH,mBAAmB;IACnB;;OAEG;IACH,aAAa;IACb;;OAEG;IACH,UAAU;CACb,CAAC;AAEF,eAAO,MAAM,uBAAuB,QAA4B,CAAC"}
1
+ {"version":3,"file":"path-constants.d.mts","sourceRoot":"","sources":["../../src/serve-gib/path-constants.mts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC;;;GAGG;AACH,eAAO,MAAM,kBAAkB,UAK9B,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB;IACzB;;OAEG;IACH,MAAM;IAEN;;OAEG;IACH,WAAW;IAEX;;OAEG;IACH,UAAU;IAEV;;OAEG;IACH,QAAQ;IAER;;OAEG;IACH,aAAa;IAEb;;OAEG;IACH,UAAU;IAEV;;OAEG;IACH,eAAe;IAEf;;;;;;;;OAQG;IACH,gBAAgB;IAEhB;;OAEG;IACH,eAAe;IAEf;;OAEG;IACH,oBAAoB;IAEpB;;;;;;;;;;;OAWG;IACH,aAAa;IACb;;OAEG;IACH,OAAO;IACP;;OAEG;IACH,iBAAiB;IACjB;;OAEG;IACH,kBAAkB;IAClB;;OAEG;IACH,mBAAmB;IACnB;;OAEG;IACH,aAAa;IACb;;OAEG;IACH,UAAU;IACV;;OAEG;IACH,uBAAuB;IAEvB;;OAEG;IACH,YAAY;IACZ,iBAAiB;IAEjB;;OAEG;IACH,0BAA0B;IAE1B;;OAEG;IACH,oCAAoC;CACvC,CAAC;AAEF,eAAO,MAAM,uBAAuB,QAA4B,CAAC"}
@@ -102,6 +102,23 @@ export const API_PATH_REGEXES = {
102
102
  * /api/email/send
103
103
  */
104
104
  EMAIL_SEND: /^\/api\/email\/send\/?$/,
105
+ /**
106
+ * /api/email/verification-code
107
+ */
108
+ EMAIL_VERIFICATION_CODE: /^\/api\/email\/verification-code\/?$/,
109
+ /**
110
+ * /api/email/verify or /api/email/verify-code
111
+ */
112
+ EMAIL_VERIFY: /^\/api\/email\/verify\/?$/,
113
+ EMAIL_VERIFY_CODE: /^\/api\/email\/verify-code\/?$/,
114
+ /**
115
+ * /api/identity/custodian/genesis
116
+ */
117
+ KEYSTONE_CUSTODIAN_GENESIS: /^\/api\/identity\/custodian\/genesis\/?$/i,
118
+ /**
119
+ * /api/identity/custodian/register-delegate
120
+ */
121
+ KEYSTONE_CUSTODIAN_REGISTER_DELEGATE: /^\/api\/identity\/custodian\/register-delegate\/?$/i,
105
122
  };
106
123
  export const VALID_STATIC_PATH_REGEX = /^\/[a-zA-Z0-9\-_\.\/]*$/;
107
124
  //# sourceMappingURL=path-constants.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"path-constants.mjs","sourceRoot":"","sources":["../../src/serve-gib/path-constants.mts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AAEpC;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAC9B,MAAM,EAAO,yBAAyB;IACtC,MAAM,EAAO,uBAAuB;IACpC,IAAI,EAAS,gBAAgB;IAC7B,UAAU,EAAG,wCAAwC;CACxD,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC5B;;OAEG;IACH,MAAM,EAAE,oBAAoB;IAE5B;;OAEG;IACH,WAAW,EAAE,oFAAoF;IAEjG;;OAEG;IACH,UAAU,EAAE,6EAA6E;IAEzF;;OAEG;IACH,QAAQ,EAAE,sBAAsB;IAEhC;;OAEG;IACH,aAAa,EAAE,mDAAmD;IAElE;;OAEG;IACH,UAAU,EAAE,mBAAmB;IAE/B;;OAEG;IACH,eAAe,EAAE,2DAA2D;IAE5E;;;;;;;;OAQG;IACH,gBAAgB,EAAE,+BAA+B;IAEjD;;OAEG;IACH,eAAe,EAAE,8BAA8B;IAE/C;;OAEG;IACH,oBAAoB,EAAE,mCAAmC;IAEzD;;;;;;;;;;;OAWG;IACH,aAAa,EAAE,4BAA4B;IAC3C;;OAEG;IACH,OAAO,EAAE,mDAAmD;IAC5D;;OAEG;IACH,iBAAiB,EAAE,iCAAiC;IACpD;;OAEG;IACH,kBAAkB,EAAE,kCAAkC;IACtD;;OAEG;IACH,mBAAmB,EAAE,mCAAmC;IACxD;;OAEG;IACH,aAAa,EAAE,4BAA4B;IAC3C;;OAEG;IACH,UAAU,EAAE,yBAAyB;CACxC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,yBAAyB,CAAC"}
1
+ {"version":3,"file":"path-constants.mjs","sourceRoot":"","sources":["../../src/serve-gib/path-constants.mts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AAEpC;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAC9B,MAAM,EAAO,yBAAyB;IACtC,MAAM,EAAO,uBAAuB;IACpC,IAAI,EAAS,gBAAgB;IAC7B,UAAU,EAAG,wCAAwC;CACxD,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC5B;;OAEG;IACH,MAAM,EAAE,oBAAoB;IAE5B;;OAEG;IACH,WAAW,EAAE,oFAAoF;IAEjG;;OAEG;IACH,UAAU,EAAE,6EAA6E;IAEzF;;OAEG;IACH,QAAQ,EAAE,sBAAsB;IAEhC;;OAEG;IACH,aAAa,EAAE,mDAAmD;IAElE;;OAEG;IACH,UAAU,EAAE,mBAAmB;IAE/B;;OAEG;IACH,eAAe,EAAE,2DAA2D;IAE5E;;;;;;;;OAQG;IACH,gBAAgB,EAAE,+BAA+B;IAEjD;;OAEG;IACH,eAAe,EAAE,8BAA8B;IAE/C;;OAEG;IACH,oBAAoB,EAAE,mCAAmC;IAEzD;;;;;;;;;;;OAWG;IACH,aAAa,EAAE,4BAA4B;IAC3C;;OAEG;IACH,OAAO,EAAE,mDAAmD;IAC5D;;OAEG;IACH,iBAAiB,EAAE,iCAAiC;IACpD;;OAEG;IACH,kBAAkB,EAAE,kCAAkC;IACtD;;OAEG;IACH,mBAAmB,EAAE,mCAAmC;IACxD;;OAEG;IACH,aAAa,EAAE,4BAA4B;IAC3C;;OAEG;IACH,UAAU,EAAE,yBAAyB;IACrC;;OAEG;IACH,uBAAuB,EAAE,sCAAsC;IAE/D;;OAEG;IACH,YAAY,EAAE,2BAA2B;IACzC,iBAAiB,EAAE,gCAAgC;IAEnD;;OAEG;IACH,0BAA0B,EAAE,2CAA2C;IAEvE;;OAEG;IACH,oCAAoC,EAAE,qDAAqD;CAC9F,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,yBAAyB,CAAC"}
@@ -0,0 +1,93 @@
1
+ # E2E Test Plan: Full Custodian Passwordless Onboarding & Single-Turn Authorization Ceremony
2
+
3
+ Tests custodian (passwordless) account creation, add-device.
4
+
5
+ * **Create Account**: passwordless, Google or custom email
6
+ * **Sign in**: passwordless, Google or custom email
7
+
8
+ ---
9
+
10
+ ## Overview & Execution Model
11
+
12
+ | Property | Specification |
13
+ | :--- | :--- |
14
+ | **Primary Domain Target** | `https://local.ibgib.space` (Google OAuth callback domain) |
15
+ | **Server Mode** | `EMAIL_MODE=mock` |
16
+ | **Target Audience** | Human QA Testers / Agent Browser Testers |
17
+
18
+ ### Fail-Fast Sequential Lifecycle
19
+ - Executed linearly from **Phase 0 through Phase 3**.
20
+ - If any step in any phase fails, execution halts immediately, and the E2E test run is marked as **FAILED**.
21
+
22
+ ---
23
+
24
+ ## Test Variables
25
+
26
+ * `<E2E_TEST_GMAIL_ADDRESS_ALICE>` - located in `.env`
27
+ * `<test_url>` - `https://local.ibgib.space`
28
+
29
+ ---
30
+
31
+ ## Sequential Test Phases
32
+
33
+ ### Phase 0: Prerequisites & Environment Setup
34
+ Verify that local Docker services are running, server listens on port 3000, target domain `<test_url>` resolves, server data directory is cleaned, and local browser storage (IndexedDB, LocalStorage, SessionStorage) is cleared.
35
+
36
+ > [!WARNING]
37
+ > Cleaning the server wipes `<dataDir>/` (`identity_index/`, email hashes, and all registered domain tenancy folders). Do not run server cleaning if active personal testing or long-running server state needs to be preserved!
38
+
39
+ #### Steps
40
+ 1. **Clean and reset local server state**:
41
+ - Run `npm run clean:space-gib:server` in monorepo root (deletes `.data/` directory and resets email index).
42
+ - *(Optional UX Tip)*: If using Docker Desktop on Windows, clear the container log terminal view before restarting to eliminate log noise when locating 6-digit verification code log entries.
43
+ - Run `npm run restart:space-gib` to restart the server with a clean data state, or `npm run docker:space-gib` / `npm run docker:space-gib:d` if not started.
44
+ 2. **Confirm server startup log outputs**: (e.g. `[space-gib server] dataDir: /data/ibgib-space` and `[space-gib server] listening on http://0.0.0.0:3000`).
45
+ 3. **Open test browser(s)**: Navigate to `<test_url>`.
46
+ 4. **Clear browser data for `<test_url>`** (all ibgib data is stored in IndexedDB): Ensure you are you at `<test_url>` -> Open Developer Tools (F12) -> Application -> IndexedDB -> `space_gib_db` -> Delete database, then refresh the browser
47
+ 5. **Test Credentials**: Refer to (vcs ignored) `.env` for `<E2E_TEST_GMAIL_ADDRESS_ALICE>` and password.
48
+
49
+ ### Phase 1: First-Time Passwordless Account Creation & Custodian Genesis
50
+ Create a new custodian identity on `<test_url>` using the **Quick / Passwordless** workflow (6-digit OTP email code or Google SSO), verify single-turn `custodianReqs` generation, and confirm local delegate keystone registration.
51
+
52
+ #### Steps
53
+ 1. Open browser to `<test_url>`.
54
+ 2. In `<ibgib-identity-header>`, click **Create Account**.
55
+ 3. Observe the default **Quick (Passwordless)** tab is selected by default.
56
+ 4. Enter email `<E2E_TEST_GMAIL_ADDRESS_ALICE>` and click **Send Code** (or click **Continue with Google**).
57
+ 5. Open server console / terminal logs to locate the dispatched 6-digit OTP verification code.
58
+ 6. Enter the 6-digit OTP code into the PIN input prompt in the same tab and click **Verify Code**.
59
+ 7. Verify API execution:
60
+ - Client calls `POST /api/identity/custodian/genesis`.
61
+ - Server returns `isNewIdentity: true`, `primaryTjpAddr`, `primaryKeystone`, and single-turn `custodianReqs`.
62
+ - Client derives local delegate secret, constructs $K_{\text{delegate}}$, and calls `POST /api/identity/custodian/register-delegate`.
63
+ 8. Verify outcomes:
64
+ - Identity header displays avatar & username (derived from email).
65
+ - Local browser user space contains $K_{\text{primary}}$ and $K_{\text{delegate}}$.
66
+ - `<dataDir>/identity_index/email/hashes/` contains the registered email index.
67
+
68
+
69
+ ### Phase 2: Second-Device Passwordless Sign-In & Device Pairing
70
+ Open a fresh Incognito browser window to `<test_url>`, execute passwordless sign-in for `<E2E_TEST_GMAIL_ADDRESS_ALICE>`, and verify that the server provisions a fresh `custodianReqs` payload and registers a second device delegate ($K_{\text{delegate2}}$).
71
+
72
+ #### Steps
73
+ 1. Open a second browser window (or Incognito window) at `<test_url>`.
74
+ 2. Click **Sign In** in `<ibgib-identity-header>`.
75
+ 3. Enter the same email address `<E2E_TEST_GMAIL_ADDRESS_ALICE>` and click **Send Code** (or click **Continue with Google**).
76
+ 4. Copy the 6-digit OTP code from the server console log and submit it.
77
+ 5. Verify API execution:
78
+ - Server returns `isNewIdentity: false`, existing `primaryTjpAddr`, and fresh single-turn `custodianReqs`.
79
+ - Second browser constructs its local $K_{\text{delegate2}}$ and registers via `POST /api/identity/custodian/register-delegate`.
80
+ 6. Verify outcomes:
81
+ - Second device successfully pairs and displays user identity header.
82
+ - Server evolves $K_{\text{primary}} \to K_{\text{primary}, n=2}$ with both device delegates registered in `rel8ns.sync_delegate`.
83
+
84
+
85
+ ### Phase 3: Single-Turn Nonce Replay Prevention
86
+ Attempt to re-submit a previously consumed `custodianReqs` payload to `POST /api/identity/custodian/register-delegate` and verify that the server kernel atomically rejects the request.
87
+
88
+ #### Steps
89
+ 1. Copy or intercept a `custodianReqs` payload previously consumed in Phase 1 or Phase 2.
90
+ 2. Re-submit the same `delegateKeystone` (or identical `custodianReqs` payload) to `POST /api/identity/custodian/register-delegate`.
91
+ 3. Verify rejection outcome:
92
+ - Server rejects the request with **HTTP 409 Conflict**:
93
+ `"Custodian requirements payload has already been used. Nonce single-turn reservation violation."`
@@ -0,0 +1,132 @@
1
+ # E2E Test Plan: Identity, SSO & 6-Digit Email Code Lifecycle
2
+
3
+ This document is the official End-to-End (E2E) browser test plan for the complete identity creation, 6-digit email OTP verification, Google SSO linking, new-device sign-in, and delegate revocation user lifecycle.
4
+
5
+ * **Create Account**: Create local/sovereign identity
6
+ * **Verify Email**: 6-digit code
7
+ * **Link SSO**: Google is only OAuth2 provider atow
8
+ * **Sign in**: add device
9
+ * **Revoke delegate**: remove device
10
+
11
+ ---
12
+
13
+ ## Overview & Execution Model
14
+
15
+ | Property | Specification |
16
+ | :--- | :--- |
17
+ | **Primary Domain Target** | `https://local.ibgib.space` (Google OAuth callback domain) |
18
+ | **Server Mode** | `EMAIL_MODE=mock` |
19
+ | **Target Audience** | Human QA Testers / Agent Browser Testers |
20
+
21
+ ### Fail-Fast Sequential Lifecycle
22
+ - Executed linearly from **Phase 0 through Phase 5**.
23
+ - If any step in any phase fails, execution halts immediately, and the E2E test run is marked as **FAILED**.
24
+
25
+ ---
26
+
27
+ ## Test Variables
28
+
29
+ * `<E2E_TEST_GMAIL_ADDRESS_ALICE>` - located in `.env`
30
+ * `<test_url>` - `https://local.ibgib.space`
31
+
32
+ ---
33
+
34
+ ## Sequential Test Phases
35
+
36
+ ### Phase 0: Prerequisites & Environment Setup
37
+ Verify that local Docker services are running, server listens on port 3000, target domain `https://local.ibgib.space` resolves, server data directory is cleaned, and local browser storage (IndexedDB, LocalStorage, SessionStorage) is cleared.
38
+
39
+ > [!WARNING]
40
+ > Cleaning the server wipes `<dataDir>/` (`identity_index/`, email hashes, and all registered domain tenancy folders). Do not run server cleaning if active personal testing or long-running server state needs to be preserved!
41
+
42
+ #### Steps
43
+ 1. **Clean and reset local server state**:
44
+ - Run `npm run clean:space-gib:server` in monorepo root (deletes `.data/` directory and resets email index).
45
+ - *(Optional UX Tip)*: If using Docker Desktop on Windows, clear the container log terminal view before restarting to eliminate log noise when locating 6-digit verification code log entries.
46
+ - Run `npm run restart:space-gib` to restart the server with a clean data state, or `npm run docker:space-gib` / `npm run docker:space-gib:d` if not started.
47
+ 2. **Confirm server startup log outputs**: (e.g. `[space-gib server] dataDir: /data/ibgib-space` and `[space-gib server] listening on http://0.0.0.0:3000`).
48
+ 3. **Open test browser(s)**: Navigate to `<test_url>`.
49
+ 4. **Clear browser data for `<test_url>`** (all ibgib data is stored in IndexedDB): Ensure you are you at `<test_url>` -> Open Developer Tools (F12) -> Application -> IndexedDB -> `space_gib_db` -> Delete database, then refresh the browser
50
+ 5. **Test Credentials**: Refer to (vcs ignored) `.env` for `<E2E_TEST_GMAIL_ADDRESS_ALICE>` and password.
51
+
52
+ ### Phase 1: Account Creation & Email Verification Code Dispatch
53
+ Create a new identity `alice` with email `<E2E_TEST_GMAIL_ADDRESS_ALICE>` (from `.env`) on `https://local.ibgib.space` and verify that the genesis keystone is quarantined in the `email/pending/` staging directory with `code.json` and Ahead-of-Time (AOT) metadata JSON files.
54
+
55
+ #### Steps
56
+ 1. Open browser to `https://local.ibgib.space`.
57
+ 2. In `<ibgib-identity-header>`, click **Create Account**.
58
+ 3. Input registration credentials:
59
+ - **Username**: `alice`
60
+ - **Passphrase**: `asdf`
61
+ - **Email**: `<E2E_TEST_GMAIL_ADDRESS_ALICE>` (from `.env`)
62
+ 4. Click **Generate Identity**.
63
+ 5. Verify status message in UI: `✉️ Verification code sent to your email. Enter 6-digit code below:`
64
+ 6. Verify PIN input field (`#section-code-verification`) appears in the UI.
65
+ 7. Verify server terminal log contains 6-digit verification code:
66
+ `[EmailSenderMock] ✉️ Verification Code for <E2E_TEST_GMAIL_ADDRESS_ALICE>: <6-DIGIT-CODE>`
67
+ 8. Verify file system staging quarantine:
68
+ - Check `<dataDir>/identity_index/email/pending/<expiryTicks>_<tjpHash>/` exists.
69
+ - Confirm folder contains `keystone.json`, `code.json`, and `emails/<emailHash>.json` with `{ "email": "<E2E_TEST_GMAIL_ADDRESS_ALICE>", "verified": false }`.
70
+ - Confirm `<dataDir>/identity_index/email/hashes/` does NOT yet contain `<E2E_TEST_GMAIL_ADDRESS_ALICE>`.
71
+
72
+
73
+ ### Phase 2: 6-Digit Verification Code Entry, Account Activation & Automatic Delegate Sync
74
+ Copy the 6-digit verification code from the server log, enter it into the UI PIN input prompt in the same tab, verify account activation, confirm promotion of the keystone to official server space, and verify automatic delegate keystone sync.
75
+
76
+ #### Steps
77
+ 1. Copy the 6-digit verification code from the server log (e.g. `482901`).
78
+ 2. In the same browser tab, enter the code into the PIN input field and click **Verify Code**.
79
+ 3. Verify status message in UI: `Identity fully created & activated!`
80
+ 4. Verify file system promotion:
81
+ - Check `<dataDir>/identity_index/email/pending/` staging folder is automatically removed.
82
+ - Check `<dataDir>/identity_index/email/hashes/` contains `<emailHash>.json` mapping `<E2E_TEST_GMAIL_ADDRESS_ALICE>` to `primaryTjpAddr`.
83
+ - Confirm domain identity keystone is registered in official server space under `<dataDir>/domains/<domainGib>/`.
84
+ - Confirm sync delegate keystone is successfully registered on the evolved parent keystone on the server."
85
+
86
+
87
+ ### Phase 3: Google SSO Linking in Identity Manager
88
+ Open Identity Manager on `https://local.ibgib.space`, trigger Google OAuth2 linking, and verify that the primary keystone evolves to attach `challengePools["custodian-manage-google"]`.
89
+
90
+ #### Steps
91
+ 1. Return to the main app tab on `https://local.ibgib.space`.
92
+ 2. Click `<ibgib-identity-header>` -> Select **Identity Manager** (`<ibgib-keystone-details>`).
93
+ 3. Click **"Link Google SSO"**.
94
+ 4. Complete Google OAuth2 popup authentication.
95
+ 5. Verify primary keystone evolution:
96
+ - Keystone evolves ($A_0 \to A_1$) adding `challengePools["custodian-manage-google"]`.
97
+ - Identity Manager updates to display `Google SSO Linked ✅`.
98
+ 6. Verify server log contains: `[SsoLinkHandler] Successfully linked google SSO for primary identity`.
99
+
100
+
101
+ ### Phase 4: New-Device Google SSO Sign-In (Incognito Mode)
102
+ Open a clean Incognito browser window to `https://local.ibgib.space`, complete Google SSO sign-in, verify that `IdentityIndexService` resolves the primary identity, verifies the `custodian-manage-google` pool, and pairs the new device.
103
+
104
+ #### Steps
105
+ 1. Open a fresh **Incognito Window** (ctrl+shift+N) to `https://local.ibgib.space`.
106
+ 2. In `<ibgib-identity-header>`, click **Sign In with Google**.
107
+ 3. Complete Google OAuth2 popup authentication.
108
+ 4. Verify server log processing:
109
+ - `[IdentityIndexService]` resolves `<E2E_TEST_GMAIL_ADDRESS_ALICE>` -> `primaryTjpAddr`.
110
+ - Server loads domain graph, verifies `custodian-manage-google` challenge pool, and issues delegate challenge.
111
+ 5. Verify client UI result:
112
+ - Browser receives delegate response and pairs device seamlessly.
113
+ - Active identity header updates to `alice` with active status badge `🟢`.
114
+
115
+
116
+ ### Phase 5: Delegate Device Tagging & Revocation
117
+ Return to the primary device window, open Identity Manager, verify the remote paired device displays its device tag icon, click **`[Revoke]`**, enter the master passphrase, and verify parent keystone evolution $A_n \to A_{n+1}$.
118
+
119
+ #### Steps
120
+ 1. Switch back to the primary browser window on `https://local.ibgib.space`.
121
+ 2. Open Identity Manager (`<ibgib-keystone-details>`).
122
+ 3. Inspect the **Registered Delegates** table:
123
+ - Confirm remote paired device from Phase 4 is listed.
124
+ - Confirm device tag icon and name are displayed (e.g. `💻 work-laptop`).
125
+ - Confirm red **`[Revoke]`** button is rendered next to the delegate entry.
126
+ 4. Click **`[Revoke]`** next to the remote delegate device.
127
+ 5. Enter master passphrase `MySecretPassword123!` when prompted.
128
+ 6. Verify primary keystone evolution ($A_1 \to A_2$):
129
+ - Primary keystone evolves removing the revoked delegate from `data.delegates`.
130
+ - Keystone evolution is posted to server via `putEvolveKeystone()`.
131
+ - Table re-renders with the revoked delegate removed.
132
+ 7. Switch back to the Incognito window (Phase 4 device) $\to$ trigger sync or refresh $\to$ confirm device is unlinked/deauthorized.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibgib/node-gib",
3
- "version": "0.0.14",
3
+ "version": "0.0.17",
4
4
  "description": "Node and server-specific ibGib code, i.e., things that don't run in the browser.",
5
5
  "funding": {
6
6
  "type": "individual",
@@ -24,10 +24,10 @@
24
24
  "author": "William Raiford",
25
25
  "license": "ISC",
26
26
  "dependencies": {
27
- "@ibgib/helper-gib": "^0.0.36",
28
- "@ibgib/ts-gib": "^0.5.33",
29
- "@ibgib/core-gib": "^0.1.70",
30
- "@ibgib/encrypt-gib": "^0.2.37"
27
+ "@ibgib/helper-gib": "*",
28
+ "@ibgib/ts-gib": "*",
29
+ "@ibgib/core-gib": "*",
30
+ "@ibgib/encrypt-gib": "*"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@types/node": "^20.2.1"