@ibgib/node-gib 0.0.9 → 0.0.13

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 (329) hide show
  1. package/dist/assumptions.respec.mjs.map +1 -1
  2. package/dist/email/aws/aws-sigv4-helper.d.mts +26 -0
  3. package/dist/email/aws/aws-sigv4-helper.d.mts.map +1 -0
  4. package/dist/email/aws/aws-sigv4-helper.mjs +94 -0
  5. package/dist/email/aws/aws-sigv4-helper.mjs.map +1 -0
  6. package/dist/email/aws/email-receiver-aws.d.mts +13 -0
  7. package/dist/email/aws/email-receiver-aws.d.mts.map +1 -0
  8. package/dist/email/aws/email-receiver-aws.mjs +97 -0
  9. package/dist/email/aws/email-receiver-aws.mjs.map +1 -0
  10. package/dist/email/aws/email-sender-aws.d.mts +23 -0
  11. package/dist/email/aws/email-sender-aws.d.mts.map +1 -0
  12. package/dist/email/aws/email-sender-aws.mjs +106 -0
  13. package/dist/email/aws/email-sender-aws.mjs.map +1 -0
  14. package/dist/email/aws/index.d.mts +7 -0
  15. package/dist/email/aws/index.d.mts.map +1 -0
  16. package/dist/email/aws/index.mjs +7 -0
  17. package/dist/email/aws/index.mjs.map +1 -0
  18. package/dist/email/email-constants.d.mts +15 -0
  19. package/dist/email/email-constants.d.mts.map +1 -0
  20. package/dist/email/email-constants.mjs +15 -0
  21. package/dist/email/email-constants.mjs.map +1 -0
  22. package/dist/email/email-helpers.d.mts +35 -0
  23. package/dist/email/email-helpers.d.mts.map +1 -0
  24. package/dist/email/email-helpers.mjs +144 -0
  25. package/dist/email/email-helpers.mjs.map +1 -0
  26. package/dist/email/email-receiver.d.mts +12 -0
  27. package/dist/email/email-receiver.d.mts.map +1 -0
  28. package/dist/email/email-receiver.mjs +23 -0
  29. package/dist/email/email-receiver.mjs.map +1 -0
  30. package/dist/email/email-sender.d.mts +13 -0
  31. package/dist/email/email-sender.d.mts.map +1 -0
  32. package/dist/email/email-sender.mjs +35 -0
  33. package/dist/email/email-sender.mjs.map +1 -0
  34. package/dist/email/email-service.respec.d.mts +2 -0
  35. package/dist/email/email-service.respec.d.mts.map +1 -0
  36. package/dist/email/email-service.respec.mjs +115 -0
  37. package/dist/email/email-service.respec.mjs.map +1 -0
  38. package/dist/email/email-types.d.mts +53 -0
  39. package/dist/email/email-types.d.mts.map +1 -0
  40. package/dist/email/email-types.mjs +5 -0
  41. package/dist/email/email-types.mjs.map +1 -0
  42. package/dist/email/index.d.mts +11 -0
  43. package/dist/email/index.d.mts.map +1 -0
  44. package/dist/email/index.mjs +11 -0
  45. package/dist/email/index.mjs.map +1 -0
  46. package/dist/email/mock/email-sender-mock.d.mts +20 -0
  47. package/dist/email/mock/email-sender-mock.d.mts.map +1 -0
  48. package/dist/email/mock/email-sender-mock.mjs +47 -0
  49. package/dist/email/mock/email-sender-mock.mjs.map +1 -0
  50. package/dist/email/mock/index.d.mts +5 -0
  51. package/dist/email/mock/index.d.mts.map +1 -0
  52. package/dist/email/mock/index.mjs +5 -0
  53. package/dist/email/mock/index.mjs.map +1 -0
  54. package/dist/index.d.mts +13 -0
  55. package/dist/index.d.mts.map +1 -0
  56. package/dist/index.mjs +14 -0
  57. package/dist/index.mjs.map +1 -0
  58. package/dist/respec-gib.node.mjs +3 -4
  59. package/dist/respec-gib.node.mjs.map +1 -1
  60. package/dist/serve-gib/bootstrap-helper.d.mts +27 -0
  61. package/dist/serve-gib/bootstrap-helper.d.mts.map +1 -0
  62. package/dist/serve-gib/bootstrap-helper.mjs +116 -0
  63. package/dist/serve-gib/bootstrap-helper.mjs.map +1 -0
  64. package/dist/serve-gib/bootstrap-helper.respec.d.mts +2 -0
  65. package/dist/serve-gib/bootstrap-helper.respec.d.mts.map +1 -0
  66. package/dist/serve-gib/bootstrap-helper.respec.mjs +85 -0
  67. package/dist/serve-gib/bootstrap-helper.respec.mjs.map +1 -0
  68. package/dist/serve-gib/constants.d.mts +2 -0
  69. package/dist/serve-gib/constants.d.mts.map +1 -0
  70. package/dist/serve-gib/constants.mjs +2 -0
  71. package/dist/serve-gib/constants.mjs.map +1 -0
  72. package/dist/serve-gib/handlers/api/debug/ws-echo.handler.d.mts +39 -0
  73. package/dist/serve-gib/handlers/api/debug/ws-echo.handler.d.mts.map +1 -0
  74. package/dist/serve-gib/handlers/api/debug/ws-echo.handler.mjs +99 -0
  75. package/dist/serve-gib/handlers/api/debug/ws-echo.handler.mjs.map +1 -0
  76. package/dist/serve-gib/handlers/api/email/email-inbound.handler.d.mts +25 -0
  77. package/dist/serve-gib/handlers/api/email/email-inbound.handler.d.mts.map +1 -0
  78. package/dist/serve-gib/handlers/api/email/email-inbound.handler.mjs +54 -0
  79. package/dist/serve-gib/handlers/api/email/email-inbound.handler.mjs.map +1 -0
  80. package/dist/serve-gib/handlers/api/email/email-outbound.handler.d.mts +24 -0
  81. package/dist/serve-gib/handlers/api/email/email-outbound.handler.d.mts.map +1 -0
  82. package/dist/serve-gib/handlers/api/email/email-outbound.handler.mjs +72 -0
  83. package/dist/serve-gib/handlers/api/email/email-outbound.handler.mjs.map +1 -0
  84. package/dist/serve-gib/handlers/api/health.handler.d.mts +14 -0
  85. package/dist/serve-gib/handlers/api/health.handler.d.mts.map +1 -0
  86. package/dist/serve-gib/handlers/api/health.handler.mjs +21 -0
  87. package/dist/serve-gib/handlers/api/health.handler.mjs.map +1 -0
  88. package/dist/serve-gib/handlers/api/health.respec.d.mts +2 -0
  89. package/dist/serve-gib/handlers/api/health.respec.d.mts.map +1 -0
  90. package/dist/serve-gib/handlers/api/health.respec.mjs +47 -0
  91. package/dist/serve-gib/handlers/api/health.respec.mjs.map +1 -0
  92. package/dist/serve-gib/handlers/api/ibgib/ibgib-handler-types.d.mts +41 -0
  93. package/dist/serve-gib/handlers/api/ibgib/ibgib-handler-types.d.mts.map +1 -0
  94. package/dist/serve-gib/handlers/api/ibgib/ibgib-handler-types.mjs +34 -0
  95. package/dist/serve-gib/handlers/api/ibgib/ibgib-handler-types.mjs.map +1 -0
  96. package/dist/serve-gib/handlers/api/ibgib/ibgib.handler.d.mts +26 -0
  97. package/dist/serve-gib/handlers/api/ibgib/ibgib.handler.d.mts.map +1 -0
  98. package/dist/serve-gib/handlers/api/ibgib/ibgib.handler.mjs +179 -0
  99. package/dist/serve-gib/handlers/api/ibgib/ibgib.handler.mjs.map +1 -0
  100. package/dist/serve-gib/handlers/api/keystone/keystone-check-email.handler.d.mts +23 -0
  101. package/dist/serve-gib/handlers/api/keystone/keystone-check-email.handler.d.mts.map +1 -0
  102. package/dist/serve-gib/handlers/api/keystone/keystone-check-email.handler.mjs +52 -0
  103. package/dist/serve-gib/handlers/api/keystone/keystone-check-email.handler.mjs.map +1 -0
  104. package/dist/serve-gib/handlers/api/keystone/keystone-evolve.handler.d.mts +44 -0
  105. package/dist/serve-gib/handlers/api/keystone/keystone-evolve.handler.d.mts.map +1 -0
  106. package/dist/serve-gib/handlers/api/keystone/keystone-evolve.handler.mjs +127 -0
  107. package/dist/serve-gib/handlers/api/keystone/keystone-evolve.handler.mjs.map +1 -0
  108. package/dist/serve-gib/handlers/api/keystone/keystone-genesis.handler.d.mts +45 -0
  109. package/dist/serve-gib/handlers/api/keystone/keystone-genesis.handler.d.mts.map +1 -0
  110. package/dist/serve-gib/handlers/api/keystone/keystone-genesis.handler.mjs +159 -0
  111. package/dist/serve-gib/handlers/api/keystone/keystone-genesis.handler.mjs.map +1 -0
  112. package/dist/serve-gib/handlers/api/keystone/keystone-get.handler.d.mts +25 -0
  113. package/dist/serve-gib/handlers/api/keystone/keystone-get.handler.d.mts.map +1 -0
  114. package/dist/serve-gib/handlers/api/keystone/keystone-get.handler.mjs +183 -0
  115. package/dist/serve-gib/handlers/api/keystone/keystone-get.handler.mjs.map +1 -0
  116. package/dist/serve-gib/handlers/api/keystone/keystone-get.respec.d.mts +2 -0
  117. package/dist/serve-gib/handlers/api/keystone/keystone-get.respec.d.mts.map +1 -0
  118. package/dist/serve-gib/handlers/api/keystone/keystone-get.respec.mjs +98 -0
  119. package/dist/serve-gib/handlers/api/keystone/keystone-get.respec.mjs.map +1 -0
  120. package/dist/serve-gib/handlers/api/keystone/keystone-handler-types.d.mts +22 -0
  121. package/dist/serve-gib/handlers/api/keystone/keystone-handler-types.d.mts.map +1 -0
  122. package/dist/serve-gib/handlers/api/keystone/keystone-handler-types.mjs +19 -0
  123. package/dist/serve-gib/handlers/api/keystone/keystone-handler-types.mjs.map +1 -0
  124. package/dist/serve-gib/handlers/api/keystone/keystone-lookup.handler.d.mts +19 -0
  125. package/dist/serve-gib/handlers/api/keystone/keystone-lookup.handler.d.mts.map +1 -0
  126. package/dist/serve-gib/handlers/api/keystone/keystone-lookup.handler.mjs +82 -0
  127. package/dist/serve-gib/handlers/api/keystone/keystone-lookup.handler.mjs.map +1 -0
  128. package/dist/serve-gib/handlers/api/keystone/keystone-post.handler.d.mts +20 -0
  129. package/dist/serve-gib/handlers/api/keystone/keystone-post.handler.d.mts.map +1 -0
  130. package/dist/serve-gib/handlers/api/keystone/keystone-post.handler.mjs +77 -0
  131. package/dist/serve-gib/handlers/api/keystone/keystone-post.handler.mjs.map +1 -0
  132. package/dist/serve-gib/handlers/api/keystone/keystone-post.respec.d.mts +2 -0
  133. package/dist/serve-gib/handlers/api/keystone/keystone-post.respec.d.mts.map +1 -0
  134. package/dist/serve-gib/handlers/api/keystone/keystone-post.respec.mjs +131 -0
  135. package/dist/serve-gib/handlers/api/keystone/keystone-post.respec.mjs.map +1 -0
  136. package/dist/serve-gib/handlers/api/keystone/sso-config.handler.d.mts +23 -0
  137. package/dist/serve-gib/handlers/api/keystone/sso-config.handler.d.mts.map +1 -0
  138. package/dist/serve-gib/handlers/api/keystone/sso-config.handler.mjs +62 -0
  139. package/dist/serve-gib/handlers/api/keystone/sso-config.handler.mjs.map +1 -0
  140. package/dist/serve-gib/handlers/api/keystone/sso-link.handler.d.mts +23 -0
  141. package/dist/serve-gib/handlers/api/keystone/sso-link.handler.d.mts.map +1 -0
  142. package/dist/serve-gib/handlers/api/keystone/sso-link.handler.mjs +118 -0
  143. package/dist/serve-gib/handlers/api/keystone/sso-link.handler.mjs.map +1 -0
  144. package/dist/serve-gib/handlers/api/keystone/sso-login.handler.d.mts +24 -0
  145. package/dist/serve-gib/handlers/api/keystone/sso-login.handler.d.mts.map +1 -0
  146. package/dist/serve-gib/handlers/api/keystone/sso-login.handler.mjs +160 -0
  147. package/dist/serve-gib/handlers/api/keystone/sso-login.handler.mjs.map +1 -0
  148. package/dist/serve-gib/handlers/error-handler.d.mts +14 -0
  149. package/dist/serve-gib/handlers/error-handler.d.mts.map +1 -0
  150. package/dist/serve-gib/handlers/error-handler.mjs +35 -0
  151. package/dist/serve-gib/handlers/error-handler.mjs.map +1 -0
  152. package/dist/serve-gib/handlers/handler-base.d.mts +129 -0
  153. package/dist/serve-gib/handlers/handler-base.d.mts.map +1 -0
  154. package/dist/serve-gib/handlers/handler-base.mjs +402 -0
  155. package/dist/serve-gib/handlers/handler-base.mjs.map +1 -0
  156. package/dist/serve-gib/handlers/static-handler.d.mts +17 -0
  157. package/dist/serve-gib/handlers/static-handler.d.mts.map +1 -0
  158. package/dist/serve-gib/handlers/static-handler.mjs +85 -0
  159. package/dist/serve-gib/handlers/static-handler.mjs.map +1 -0
  160. package/dist/serve-gib/handlers/ws/sync-upgrade-handler-base.d.mts +35 -0
  161. package/dist/serve-gib/handlers/ws/sync-upgrade-handler-base.d.mts.map +1 -0
  162. package/dist/serve-gib/handlers/ws/sync-upgrade-handler-base.mjs +219 -0
  163. package/dist/serve-gib/handlers/ws/sync-upgrade-handler-base.mjs.map +1 -0
  164. package/dist/serve-gib/handlers/ws/sync-upgrade.handler.d.mts +21 -0
  165. package/dist/serve-gib/handlers/ws/sync-upgrade.handler.d.mts.map +1 -0
  166. package/dist/serve-gib/handlers/ws/sync-upgrade.handler.mjs +21 -0
  167. package/dist/serve-gib/handlers/ws/sync-upgrade.handler.mjs.map +1 -0
  168. package/dist/serve-gib/handlers/ws/ws-helper.d.mts +29 -0
  169. package/dist/serve-gib/handlers/ws/ws-helper.d.mts.map +1 -0
  170. package/dist/serve-gib/handlers/ws/ws-helper.mjs +195 -0
  171. package/dist/serve-gib/handlers/ws/ws-helper.mjs.map +1 -0
  172. package/dist/serve-gib/handlers/ws/ws-types.d.mts +32 -0
  173. package/dist/serve-gib/handlers/ws/ws-types.d.mts.map +1 -0
  174. package/dist/serve-gib/handlers/ws/ws-types.mjs +2 -0
  175. package/dist/serve-gib/handlers/ws/ws-types.mjs.map +1 -0
  176. package/dist/serve-gib/identity-index/identity-index-constants.d.mts +4 -0
  177. package/dist/serve-gib/identity-index/identity-index-constants.d.mts.map +1 -0
  178. package/dist/serve-gib/identity-index/identity-index-constants.mjs +4 -0
  179. package/dist/serve-gib/identity-index/identity-index-constants.mjs.map +1 -0
  180. package/dist/serve-gib/identity-index/identity-index-helpers.d.mts +35 -0
  181. package/dist/serve-gib/identity-index/identity-index-helpers.d.mts.map +1 -0
  182. package/dist/serve-gib/identity-index/identity-index-helpers.mjs +69 -0
  183. package/dist/serve-gib/identity-index/identity-index-helpers.mjs.map +1 -0
  184. package/dist/serve-gib/identity-index/identity-index-service.d.mts +41 -0
  185. package/dist/serve-gib/identity-index/identity-index-service.d.mts.map +1 -0
  186. package/dist/serve-gib/identity-index/identity-index-service.mjs +86 -0
  187. package/dist/serve-gib/identity-index/identity-index-service.mjs.map +1 -0
  188. package/dist/serve-gib/identity-index/identity-index-service.respec.d.mts +2 -0
  189. package/dist/serve-gib/identity-index/identity-index-service.respec.d.mts.map +1 -0
  190. package/dist/serve-gib/identity-index/identity-index-service.respec.mjs +109 -0
  191. package/dist/serve-gib/identity-index/identity-index-service.respec.mjs.map +1 -0
  192. package/dist/serve-gib/identity-index/identity-index-types.d.mts +31 -0
  193. package/dist/serve-gib/identity-index/identity-index-types.d.mts.map +1 -0
  194. package/dist/serve-gib/identity-index/identity-index-types.mjs +2 -0
  195. package/dist/serve-gib/identity-index/identity-index-types.mjs.map +1 -0
  196. package/dist/serve-gib/index.d.mts +50 -0
  197. package/dist/serve-gib/index.d.mts.map +1 -0
  198. package/dist/serve-gib/index.mjs +80 -0
  199. package/dist/serve-gib/index.mjs.map +1 -0
  200. package/dist/serve-gib/keystone-schema-helpers.d.mts +50 -0
  201. package/dist/serve-gib/keystone-schema-helpers.d.mts.map +1 -0
  202. package/dist/serve-gib/keystone-schema-helpers.mjs +99 -0
  203. package/dist/serve-gib/keystone-schema-helpers.mjs.map +1 -0
  204. package/dist/serve-gib/keystone-schema-helpers.respec.d.mts +2 -0
  205. package/dist/serve-gib/keystone-schema-helpers.respec.d.mts.map +1 -0
  206. package/dist/serve-gib/keystone-schema-helpers.respec.mjs +68 -0
  207. package/dist/serve-gib/keystone-schema-helpers.respec.mjs.map +1 -0
  208. package/dist/serve-gib/metaspace-nodeindexedspace/metaspace-nodeindexedspace.d.mts +38 -0
  209. package/dist/serve-gib/metaspace-nodeindexedspace/metaspace-nodeindexedspace.d.mts.map +1 -0
  210. package/dist/serve-gib/metaspace-nodeindexedspace/metaspace-nodeindexedspace.mjs +85 -0
  211. package/dist/serve-gib/metaspace-nodeindexedspace/metaspace-nodeindexedspace.mjs.map +1 -0
  212. package/dist/serve-gib/path-constants.d.mts +102 -0
  213. package/dist/serve-gib/path-constants.d.mts.map +1 -0
  214. package/dist/serve-gib/path-constants.mjs +107 -0
  215. package/dist/serve-gib/path-constants.mjs.map +1 -0
  216. package/dist/serve-gib/path-helper.d.mts +23 -0
  217. package/dist/serve-gib/path-helper.d.mts.map +1 -0
  218. package/dist/serve-gib/path-helper.mjs +107 -0
  219. package/dist/serve-gib/path-helper.mjs.map +1 -0
  220. package/dist/serve-gib/path-helper.respec.d.mts +2 -0
  221. package/dist/serve-gib/path-helper.respec.d.mts.map +1 -0
  222. package/dist/serve-gib/path-helper.respec.mjs +83 -0
  223. package/dist/serve-gib/path-helper.respec.mjs.map +1 -0
  224. package/dist/serve-gib/serve-gib-helpers.d.mts +14 -0
  225. package/dist/serve-gib/serve-gib-helpers.d.mts.map +1 -0
  226. package/dist/serve-gib/serve-gib-helpers.mjs +30 -0
  227. package/dist/serve-gib/serve-gib-helpers.mjs.map +1 -0
  228. package/dist/serve-gib/serve-gib-v1.d.mts +40 -0
  229. package/dist/serve-gib/serve-gib-v1.d.mts.map +1 -0
  230. package/dist/serve-gib/serve-gib-v1.mjs +157 -0
  231. package/dist/serve-gib/serve-gib-v1.mjs.map +1 -0
  232. package/dist/serve-gib/serve-gib.respec.d.mts +2 -0
  233. package/dist/serve-gib/serve-gib.respec.d.mts.map +1 -0
  234. package/dist/serve-gib/serve-gib.respec.mjs +85 -0
  235. package/dist/serve-gib/serve-gib.respec.mjs.map +1 -0
  236. package/dist/serve-gib/server-constants.d.mts +3 -0
  237. package/dist/serve-gib/server-constants.d.mts.map +1 -0
  238. package/dist/serve-gib/server-constants.mjs +3 -0
  239. package/dist/serve-gib/server-constants.mjs.map +1 -0
  240. package/dist/serve-gib/types.d.mts +94 -0
  241. package/dist/serve-gib/types.d.mts.map +1 -0
  242. package/dist/serve-gib/types.mjs +7 -0
  243. package/dist/serve-gib/types.mjs.map +1 -0
  244. package/dist/witness/space/metaspace/metaspace-nodespace/metaspace-nodespace-helper.mjs.map +1 -1
  245. package/dist/witness/space/metaspace/metaspace-nodespace/metaspace-nodespace.d.mts +5 -0
  246. package/dist/witness/space/metaspace/metaspace-nodespace/metaspace-nodespace.d.mts.map +1 -1
  247. package/dist/witness/space/metaspace/metaspace-nodespace/metaspace-nodespace.mjs +37 -0
  248. package/dist/witness/space/metaspace/metaspace-nodespace/metaspace-nodespace.mjs.map +1 -1
  249. package/dist/witness/space/node-filesystem-space/node-filesystem-space-helper.mjs +1 -1
  250. package/dist/witness/space/node-filesystem-space/node-filesystem-space-helper.mjs.map +1 -1
  251. package/dist/witness/space/node-filesystem-space/node-filesystem-space-types.d.mts.map +1 -1
  252. package/dist/witness/space/node-filesystem-space/node-filesystem-space-v1.d.mts.map +1 -1
  253. package/dist/witness/space/node-filesystem-space/node-filesystem-space-v1.mjs.map +1 -1
  254. package/dist/witness/space/node-filesystem-space/node-indexed-filesystem-space/node-indexed-filesystem-space-v1.d.mts.map +1 -1
  255. package/dist/witness/space/node-filesystem-space/node-indexed-filesystem-space/respec/testSpace_createAndInit.node-indexed-filesystem-space-v1.respec.mjs.map +1 -1
  256. package/dist/witness/space/node-filesystem-space/node-indexed-filesystem-space/respec/testSpace_persistTransformResult.node-indexed-filesystem-space-v1.respec.mjs.map +1 -1
  257. package/dist/witness/space/node-filesystem-space/node-indexed-filesystem-space/respec/testSpace_putGetDelete.node-indexed-filesystem-space-v1.respec.mjs.map +1 -1
  258. package/dist/witness/space/node-filesystem-space/node-indexed-filesystem-space/respec/testSpace_registerNewIbGib_GetLatest.node-indexed-filesystem-space-v1.respec.mjs.map +1 -1
  259. package/dist/witness/space/node-filesystem-space/respec/testSpace_createAndInit.node-filesystem-space-v1.respec.mjs.map +1 -1
  260. package/dist/witness/space/node-filesystem-space/respec/testSpace_persistTransformResult.node-filesystem-space-v1.respec.mjs.map +1 -1
  261. package/dist/witness/space/node-filesystem-space/respec/testSpace_putGetDelete.node-filesystem-space-v1.respec.mjs.map +1 -1
  262. package/dist/witness/space/node-filesystem-space/respec/testSpace_registerNewIbGib_GetLatest.node-filesystem-space-v1.respec.mjs.map +1 -1
  263. package/package.json +2 -2
  264. package/src/email/aws/aws-sigv4-helper.mts +139 -0
  265. package/src/email/aws/email-receiver-aws.mts +107 -0
  266. package/src/email/aws/email-sender-aws.mts +130 -0
  267. package/src/email/aws/index.mts +7 -0
  268. package/src/email/email-constants.mts +18 -0
  269. package/src/email/email-helpers.mts +160 -0
  270. package/src/email/email-receiver.mts +29 -0
  271. package/src/email/email-sender.mts +44 -0
  272. package/src/email/email-service.respec.mts +134 -0
  273. package/src/email/email-types.mts +59 -0
  274. package/src/email/index.mts +11 -0
  275. package/src/email/mock/email-sender-mock.mts +54 -0
  276. package/src/email/mock/index.mts +5 -0
  277. package/src/index.mts +41 -0
  278. package/src/respec-gib.node.mts +4 -5
  279. package/src/serve-gib/CHANGELOG.md +34 -0
  280. package/src/serve-gib/README.md +77 -0
  281. package/src/serve-gib/SERVE_REFACTOR_IMPLEMENTATION.md +112 -0
  282. package/src/serve-gib/bootstrap-helper.mts +141 -0
  283. package/src/serve-gib/bootstrap-helper.respec.mts +100 -0
  284. package/src/serve-gib/constants.mts +1 -0
  285. package/src/serve-gib/handlers/api/debug/ws-echo.handler.mts +105 -0
  286. package/src/serve-gib/handlers/api/email/email-inbound.handler.mts +67 -0
  287. package/src/serve-gib/handlers/api/email/email-outbound.handler.mts +82 -0
  288. package/src/serve-gib/handlers/api/health.handler.mts +23 -0
  289. package/src/serve-gib/handlers/api/health.respec.mts +51 -0
  290. package/src/serve-gib/handlers/api/ibgib/ibgib-handler-types.mts +49 -0
  291. package/src/serve-gib/handlers/api/ibgib/ibgib.handler.mts +176 -0
  292. package/src/serve-gib/handlers/api/keystone/keystone-check-email.handler.mts +60 -0
  293. package/src/serve-gib/handlers/api/keystone/keystone-evolve.handler.mts +150 -0
  294. package/src/serve-gib/handlers/api/keystone/keystone-genesis.handler.mts +171 -0
  295. package/src/serve-gib/handlers/api/keystone/keystone-get.handler.mts +198 -0
  296. package/src/serve-gib/handlers/api/keystone/keystone-get.respec.mts +106 -0
  297. package/src/serve-gib/handlers/api/keystone/keystone-handler-types.mts +29 -0
  298. package/src/serve-gib/handlers/api/keystone/keystone-lookup.handler.mts +95 -0
  299. package/src/serve-gib/handlers/api/keystone/keystone-post.handler.mts +75 -0
  300. package/src/serve-gib/handlers/api/keystone/keystone-post.respec.mts +130 -0
  301. package/src/serve-gib/handlers/api/keystone/sso-config.handler.mts +66 -0
  302. package/src/serve-gib/handlers/api/keystone/sso-link.handler.mts +140 -0
  303. package/src/serve-gib/handlers/api/keystone/sso-login.handler.mts +190 -0
  304. package/src/serve-gib/handlers/error-handler.mts +36 -0
  305. package/src/serve-gib/handlers/handler-base.mts +383 -0
  306. package/src/serve-gib/handlers/static-handler.mts +83 -0
  307. package/src/serve-gib/handlers/ws/sync-upgrade-handler-base.mts +233 -0
  308. package/src/serve-gib/handlers/ws/sync-upgrade.handler.mts +24 -0
  309. package/src/serve-gib/handlers/ws/ws-helper.mts +216 -0
  310. package/src/serve-gib/handlers/ws/ws-types.mts +53 -0
  311. package/src/serve-gib/identity-index/identity-index-constants.mts +3 -0
  312. package/src/serve-gib/identity-index/identity-index-helpers.mts +85 -0
  313. package/src/serve-gib/identity-index/identity-index-service.mts +109 -0
  314. package/src/serve-gib/identity-index/identity-index-service.respec.mts +135 -0
  315. package/src/serve-gib/identity-index/identity-index-types.mts +33 -0
  316. package/src/serve-gib/index.mts +92 -0
  317. package/src/serve-gib/keystone-schema-helpers.mts +120 -0
  318. package/src/serve-gib/keystone-schema-helpers.respec.mts +85 -0
  319. package/src/serve-gib/metaspace-nodeindexedspace/metaspace-nodeindexedspace.mts +109 -0
  320. package/src/serve-gib/path-constants.mts +119 -0
  321. package/src/serve-gib/path-helper.mts +101 -0
  322. package/src/serve-gib/path-helper.respec.mts +99 -0
  323. package/src/serve-gib/serve-gib-helpers.mts +32 -0
  324. package/src/serve-gib/serve-gib-v1.mts +172 -0
  325. package/src/serve-gib/serve-gib.respec.mts +90 -0
  326. package/src/serve-gib/server-constants.mts +2 -0
  327. package/src/serve-gib/types.mts +102 -0
  328. package/src/witness/space/metaspace/metaspace-nodespace/metaspace-nodespace.mts +41 -0
  329. package/src/witness/space/node-filesystem-space/node-filesystem-space-helper.mts +1 -1
@@ -0,0 +1,69 @@
1
+ import * as path from 'path';
2
+ import { hash } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
3
+ import { KEYSTONE_EMAIL_REGEXP } from '@ibgib/core-gib/dist/keystone/keystone-constants.mjs';
4
+ import { DEFAULT_EMAIL_HASHES_SUBDIR, DEFAULT_IDENTITY_INDEX_SALT } from './identity-index-constants.mjs';
5
+ /**
6
+ * Validates an email address against length constraints and KEYSTONE_EMAIL_REGEXP.
7
+ * Returns an array of error message strings (empty `[]` if valid).
8
+ */
9
+ export function validateEmail({ email }) {
10
+ const errors = [];
11
+ if (!email || typeof email !== 'string') {
12
+ errors.push('Email must be a non-empty string.');
13
+ return errors;
14
+ }
15
+ const trimmed = email.trim();
16
+ if (trimmed.length < 3) {
17
+ errors.push('Email length must be at least 3 characters.');
18
+ }
19
+ if (trimmed.length > 254) {
20
+ errors.push('Email length must not exceed 254 characters.');
21
+ }
22
+ if (!KEYSTONE_EMAIL_REGEXP.test(trimmed)) {
23
+ errors.push(`Email '${trimmed}' is not a valid email format.`);
24
+ }
25
+ return errors;
26
+ }
27
+ /**
28
+ * Normalizes an email string (lowercased and trimmed).
29
+ */
30
+ export function normalizeEmail(email) {
31
+ if (!email || typeof email !== 'string') {
32
+ return '';
33
+ }
34
+ return email.trim().toLowerCase();
35
+ }
36
+ /**
37
+ * Computes SHA256 privacy hash of an email string:
38
+ * `SHA256(normalizeEmail(email) + salt)` using `hash` from `@ibgib/helper-gib`.
39
+ */
40
+ export async function getIdentityEmailHash({ email, salt = process.env.IDENTITY_INDEX_SALT || DEFAULT_IDENTITY_INDEX_SALT, }) {
41
+ const validationErrors = validateEmail({ email });
42
+ if (validationErrors.length > 0) {
43
+ throw new Error(`Invalid email address: ${validationErrors.join(', ')} (E: 69a68886b1dab2f4f85c3e884031d326)`);
44
+ }
45
+ const normalized = normalizeEmail(email);
46
+ const emailHash = await hash({ s: `${normalized}${salt}` });
47
+ return emailHash;
48
+ }
49
+ /**
50
+ * Returns the sharded directory path and truncated filename for an email hash.
51
+ *
52
+ * Full Hash (e.g. 64 chars): `abcdef12345...`
53
+ * Subfolders: `ab/cd/ef`
54
+ * Truncated filename: `12345....json` (strips the leading 6 characters that form the 3 subfolder pairs).
55
+ */
56
+ export function getShardedIndexPath({ baseDir, emailHash, }) {
57
+ if (!emailHash || emailHash.length < 7) {
58
+ throw new Error(`Invalid email hash string '${emailHash}'. Must be at least 7 characters. (E: 7aeb7885a7f1b4576899db283516d826)`);
59
+ }
60
+ const f1 = emailHash.slice(0, 2);
61
+ const f2 = emailHash.slice(2, 4);
62
+ const f3 = emailHash.slice(4, 6);
63
+ const remainingHash = emailHash.slice(6);
64
+ const filename = `${remainingHash}.json`;
65
+ const folderPath = path.join(baseDir, DEFAULT_EMAIL_HASHES_SUBDIR, f1, f2, f3);
66
+ const filePath = path.join(folderPath, filename);
67
+ return { folderPath, filePath, filename };
68
+ }
69
+ //# sourceMappingURL=identity-index-helpers.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity-index-helpers.mjs","sourceRoot":"","sources":["../../../src/serve-gib/identity-index/identity-index-helpers.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { IbGibAddr } from '@ibgib/ts-gib/dist/types.mjs';
2
+ import { IdentityIndexRecord, IdentityIndexServiceOptions, RegisterEmailIndexResult } from './identity-index-types.mjs';
3
+ /**
4
+ * Service managing atomic, sharded identity index files for backwards email -> primary identity tjpAddr lookups.
5
+ */
6
+ export declare class IdentityIndexService {
7
+ private baseDir;
8
+ private salt;
9
+ constructor({ baseDir, salt }: IdentityIndexServiceOptions);
10
+ /**
11
+ * Registers an email to a primary identity tjpAddr.
12
+ * Uses atomic OS file creation (`flag: 'wx'`) to guarantee single-server ACID uniqueness.
13
+ * Throws `duplicate_identity_409` error if email is already registered.
14
+ */
15
+ registerEmailIndex({ email, tjpAddr, }: {
16
+ email: string;
17
+ tjpAddr: IbGibAddr;
18
+ }): Promise<RegisterEmailIndexResult>;
19
+ /**
20
+ * Retrieves the registered `IdentityIndexRecord` for an email address.
21
+ * Returns `undefined` if email is not indexed.
22
+ */
23
+ getEmailIndex({ email, }: {
24
+ email: string;
25
+ }): Promise<IdentityIndexRecord | undefined>;
26
+ /**
27
+ * Retrieves the registered `IdentityIndexRecord` directly by `emailHash`.
28
+ * Returns `undefined` if hash file does not exist.
29
+ */
30
+ getEmailIndexByHash({ emailHash, }: {
31
+ emailHash: string;
32
+ }): Promise<IdentityIndexRecord | undefined>;
33
+ /**
34
+ * Unindexes an email address (deletes the index JSON file).
35
+ * Returns `true` if unindexed, or `false` if file did not exist.
36
+ */
37
+ unregisterEmailIndex({ email, }: {
38
+ email: string;
39
+ }): Promise<boolean>;
40
+ }
41
+ //# sourceMappingURL=identity-index-service.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity-index-service.d.mts","sourceRoot":"","sources":["../../../src/serve-gib/identity-index/identity-index-service.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAGzD,OAAO,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAExH;;GAEG;AACH,qBAAa,oBAAoB;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,IAAI,CAAS;IAErB,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,2BAA2B,EAIzD;IAED;;;;OAIG;IACG,kBAAkB,CAAC,EACrB,KAAK,EACL,OAAO,GACV,EAAE;QACC,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,SAAS,CAAC;KACtB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAoBpC;IAED;;;OAGG;IACG,aAAa,CAAC,EAChB,KAAK,GACR,EAAE;QACC,KAAK,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAG3C;IAED;;;OAGG;IACG,mBAAmB,CAAC,EACtB,SAAS,GACZ,EAAE;QACC,SAAS,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAY3C;IAED;;;OAGG;IACG,oBAAoB,CAAC,EACvB,KAAK,GACR,EAAE;QACC,KAAK,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,OAAO,CAAC,CAYnB;CACJ"}
@@ -0,0 +1,86 @@
1
+ import * as fs from 'fs/promises';
2
+ import { DEFAULT_IDENTITY_INDEX_SALT } from './identity-index-constants.mjs';
3
+ import { getIdentityEmailHash, getShardedIndexPath } from './identity-index-helpers.mjs';
4
+ /**
5
+ * Service managing atomic, sharded identity index files for backwards email -> primary identity tjpAddr lookups.
6
+ */
7
+ export class IdentityIndexService {
8
+ baseDir;
9
+ salt;
10
+ constructor({ baseDir, salt }) {
11
+ if (!baseDir) {
12
+ throw new Error('baseDir must be provided to IdentityIndexService.');
13
+ }
14
+ this.baseDir = baseDir;
15
+ this.salt = salt || process.env.IDENTITY_INDEX_SALT || DEFAULT_IDENTITY_INDEX_SALT;
16
+ }
17
+ /**
18
+ * Registers an email to a primary identity tjpAddr.
19
+ * Uses atomic OS file creation (`flag: 'wx'`) to guarantee single-server ACID uniqueness.
20
+ * Throws `duplicate_identity_409` error if email is already registered.
21
+ */
22
+ async registerEmailIndex({ email, tjpAddr, }) {
23
+ const emailHash = await getIdentityEmailHash({ email, salt: this.salt });
24
+ const { folderPath, filePath } = getShardedIndexPath({ baseDir: this.baseDir, emailHash });
25
+ await fs.mkdir(folderPath, { recursive: true });
26
+ const record = {
27
+ tjpAddr,
28
+ createdAt: Date.now(),
29
+ };
30
+ try {
31
+ await fs.writeFile(filePath, JSON.stringify(record, null, 2), { flag: 'wx' });
32
+ return { emailHash, filePath, record };
33
+ }
34
+ catch (error) {
35
+ if (error.code === 'EEXIST') {
36
+ throw new Error(`Email is already registered (E: duplicate_identity_409)`);
37
+ }
38
+ throw error;
39
+ }
40
+ }
41
+ /**
42
+ * Retrieves the registered `IdentityIndexRecord` for an email address.
43
+ * Returns `undefined` if email is not indexed.
44
+ */
45
+ async getEmailIndex({ email, }) {
46
+ const emailHash = await getIdentityEmailHash({ email, salt: this.salt });
47
+ return this.getEmailIndexByHash({ emailHash });
48
+ }
49
+ /**
50
+ * Retrieves the registered `IdentityIndexRecord` directly by `emailHash`.
51
+ * Returns `undefined` if hash file does not exist.
52
+ */
53
+ async getEmailIndexByHash({ emailHash, }) {
54
+ const { filePath } = getShardedIndexPath({ baseDir: this.baseDir, emailHash });
55
+ try {
56
+ const content = await fs.readFile(filePath, 'utf8');
57
+ const record = JSON.parse(content);
58
+ return record;
59
+ }
60
+ catch (error) {
61
+ if (error.code === 'ENOENT') {
62
+ return undefined;
63
+ }
64
+ throw error;
65
+ }
66
+ }
67
+ /**
68
+ * Unindexes an email address (deletes the index JSON file).
69
+ * Returns `true` if unindexed, or `false` if file did not exist.
70
+ */
71
+ async unregisterEmailIndex({ email, }) {
72
+ const emailHash = await getIdentityEmailHash({ email, salt: this.salt });
73
+ const { filePath } = getShardedIndexPath({ baseDir: this.baseDir, emailHash });
74
+ try {
75
+ await fs.unlink(filePath);
76
+ return true;
77
+ }
78
+ catch (error) {
79
+ if (error.code === 'ENOENT') {
80
+ return false;
81
+ }
82
+ throw error;
83
+ }
84
+ }
85
+ }
86
+ //# sourceMappingURL=identity-index-service.mjs.map
@@ -0,0 +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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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=identity-index-service.respec.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity-index-service.respec.d.mts","sourceRoot":"","sources":["../../../src/serve-gib/identity-index/identity-index-service.respec.mts"],"names":[],"mappings":""}
@@ -0,0 +1,109 @@
1
+ import * as fs from 'fs/promises';
2
+ import * as path from 'path';
3
+ import { respecfully, iReckon, ifWe } from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
4
+ import { IdentityIndexService } from './identity-index-service.mjs';
5
+ import { normalizeEmail, getIdentityEmailHash, getShardedIndexPath, validateEmail } from './identity-index-helpers.mjs';
6
+ const sir = `[${import.meta.url}]`;
7
+ const TEST_SALT = 'test_salt_12345';
8
+ const TEST_BASE_DIR = path.join(process.cwd(), 'test-data-identity-index');
9
+ await respecfully(sir, 'IdentityIndexService & Helpers', async () => {
10
+ // Cleanup test data directory before & after tests
11
+ const cleanupDir = async () => {
12
+ try {
13
+ await fs.rm(TEST_BASE_DIR, { recursive: true, force: true });
14
+ }
15
+ catch { /* ignore */ }
16
+ };
17
+ await cleanupDir();
18
+ await ifWe(sir, 'normalize email strings correctly', async () => {
19
+ iReckon(sir, normalizeEmail(' Alice@Example.com ')).willEqual('alice@example.com');
20
+ iReckon(sir, normalizeEmail('BOB@DOMAIN.ORG')).willEqual('bob@domain.org');
21
+ iReckon(sir, normalizeEmail('')).willEqual('');
22
+ });
23
+ await ifWe(sir, 'validate email addresses accurately using validateEmail', async () => {
24
+ // Valid emails
25
+ iReckon(sir, validateEmail({ email: 'user@example.com' }).length).willEqual(0);
26
+ iReckon(sir, validateEmail({ email: 'user+tag@sub.domain.co.uk' }).length).willEqual(0);
27
+ iReckon(sir, validateEmail({ email: ' alice@company.org ' }).length).willEqual(0);
28
+ // Invalid emails
29
+ iReckon(sir, validateEmail({ email: '' }).length > 0).isGonnaBeTrue();
30
+ iReckon(sir, validateEmail({ email: ' ' }).length > 0).isGonnaBeTrue();
31
+ iReckon(sir, validateEmail({ email: null }).length > 0).isGonnaBeTrue();
32
+ iReckon(sir, validateEmail({ email: undefined }).length > 0).isGonnaBeTrue();
33
+ iReckon(sir, validateEmail({ email: 'no-at-sign.com' }).length > 0).isGonnaBeTrue();
34
+ iReckon(sir, validateEmail({ email: 'user@no-dot' }).length > 0).isGonnaBeTrue();
35
+ iReckon(sir, validateEmail({ email: 'user @space.com' }).length > 0).isGonnaBeTrue();
36
+ iReckon(sir, validateEmail({ email: '@domain.com' }).length > 0).isGonnaBeTrue();
37
+ });
38
+ await ifWe(sir, 'calculate consistent SHA256 email hashes with salt', async () => {
39
+ const hash1 = await getIdentityEmailHash({ email: 'Alice@Example.com', salt: TEST_SALT });
40
+ const hash2 = await getIdentityEmailHash({ email: 'alice@example.com', salt: TEST_SALT });
41
+ iReckon(sir, hash1).willEqual(hash2);
42
+ iReckon(sir, hash1.length > 30).isGonnaBeTrue();
43
+ const diffSaltHash = await getIdentityEmailHash({ email: 'alice@example.com', salt: 'different_salt' });
44
+ iReckon(sir, hash1).not.willEqual(diffSaltHash);
45
+ });
46
+ await ifWe(sir, 'calculate sharded folder paths and truncated filenames', async () => {
47
+ const fullHash = 'abcdef1234567890abcdef1234567890';
48
+ const { folderPath, filePath, filename } = getShardedIndexPath({ baseDir: TEST_BASE_DIR, emailHash: fullHash });
49
+ const expectedSubfolder = path.join(TEST_BASE_DIR, 'email_hashes', 'ab', 'cd', 'ef');
50
+ iReckon(sir, folderPath).willEqual(expectedSubfolder);
51
+ // Filename strips the leading 6 chars ('abcdef')
52
+ iReckon(sir, filename).willEqual('1234567890abcdef1234567890.json');
53
+ iReckon(sir, filePath).willEqual(path.join(expectedSubfolder, '1234567890abcdef1234567890.json'));
54
+ });
55
+ await ifWe(sir, 'register an email index and read it back', async () => {
56
+ const service = new IdentityIndexService({ baseDir: TEST_BASE_DIR, salt: TEST_SALT });
57
+ const email = 'user1@example.com';
58
+ const tjpAddr = 'keystone^AF5BB54AE1254FB499C434A2915C6BA08BC1D53936E57D19D415EA17FA3CE475';
59
+ const result = await service.registerEmailIndex({ email, tjpAddr });
60
+ iReckon(sir, result.emailHash).isGonnaBeTruthy();
61
+ iReckon(sir, result.record.tjpAddr).willEqual(tjpAddr);
62
+ iReckon(sir, result.record.createdAt > 0).isGonnaBeTrue();
63
+ const retrieved = await service.getEmailIndex({ email });
64
+ iReckon(sir, retrieved).isGonnaBeTruthy();
65
+ iReckon(sir, retrieved.tjpAddr).willEqual(tjpAddr);
66
+ });
67
+ await ifWe(sir, 'atomically reject duplicate email registration with duplicate_identity_409', async () => {
68
+ const service = new IdentityIndexService({ baseDir: TEST_BASE_DIR, salt: TEST_SALT });
69
+ const email = 'duplicate@example.com';
70
+ const tjpAddr1 = 'keystone^1111111111111111111111111111111111111111111111111111111111111111';
71
+ const tjpAddr2 = 'keystone^2222222222222222222222222222222222222222222222222222222222222222';
72
+ await service.registerEmailIndex({ email, tjpAddr: tjpAddr1 });
73
+ let duplicateCaught = false;
74
+ try {
75
+ await service.registerEmailIndex({ email, tjpAddr: tjpAddr2 });
76
+ }
77
+ catch (error) {
78
+ if (error.message.includes('duplicate_identity_409')) {
79
+ duplicateCaught = true;
80
+ }
81
+ }
82
+ iReckon(sir, duplicateCaught).asTo('duplicate registration rejected via flag wx EEXIST').isGonnaBeTrue();
83
+ });
84
+ await ifWe(sir, 'support multiple email hashes pointing to the same identity tjpAddr', async () => {
85
+ const service = new IdentityIndexService({ baseDir: TEST_BASE_DIR, salt: TEST_SALT });
86
+ const primaryTjp = 'keystone^3333333333333333333333333333333333333333333333333333333333333333';
87
+ const email1 = 'personal@example.com';
88
+ const email2 = 'work@company.com';
89
+ await service.registerEmailIndex({ email: email1, tjpAddr: primaryTjp });
90
+ await service.registerEmailIndex({ email: email2, tjpAddr: primaryTjp });
91
+ const record1 = await service.getEmailIndex({ email: email1 });
92
+ const record2 = await service.getEmailIndex({ email: email2 });
93
+ iReckon(sir, record1.tjpAddr).willEqual(primaryTjp);
94
+ iReckon(sir, record2.tjpAddr).willEqual(primaryTjp);
95
+ });
96
+ await ifWe(sir, 'unregister an email index cleanly', async () => {
97
+ const service = new IdentityIndexService({ baseDir: TEST_BASE_DIR, salt: TEST_SALT });
98
+ const email = 'delete-me@example.com';
99
+ const tjpAddr = 'keystone^4444444444444444444444444444444444444444444444444444444444444444';
100
+ await service.registerEmailIndex({ email, tjpAddr });
101
+ iReckon(sir, await service.getEmailIndex({ email })).isGonnaBeTruthy();
102
+ const unindexed = await service.unregisterEmailIndex({ email });
103
+ iReckon(sir, unindexed).isGonnaBeTrue();
104
+ const retrievedAfter = await service.getEmailIndex({ email });
105
+ iReckon(sir, retrievedAfter).isGonnaBeUndefined();
106
+ });
107
+ await cleanupDir();
108
+ });
109
+ //# sourceMappingURL=identity-index-service.respec.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity-index-service.respec.mjs","sourceRoot":"","sources":["../../../src/serve-gib/identity-index/identity-index-service.respec.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { IbGibAddr } from '@ibgib/ts-gib/dist/types.mjs';
2
+ /**
3
+ * Record stored in the atomic sharded index JSON file.
4
+ */
5
+ export interface IdentityIndexRecord {
6
+ /** Primary identity keystone TJP address. */
7
+ tjpAddr: IbGibAddr;
8
+ /** Creation timestamp (Date.now()) in epoch milliseconds. */
9
+ createdAt: number;
10
+ }
11
+ /**
12
+ * Configuration options for initializing IdentityIndexService.
13
+ */
14
+ export interface IdentityIndexServiceOptions {
15
+ /** Base directory where index shards will be stored (e.g. `data/index`). */
16
+ baseDir: string;
17
+ /** Server salt for privacy email hashing. Defaults to `DEFAULT_IDENTITY_INDEX_SALT`. */
18
+ salt?: string;
19
+ }
20
+ /**
21
+ * Result returned upon successful email index registration.
22
+ */
23
+ export interface RegisterEmailIndexResult {
24
+ /** Privacy hash derived from normalizeEmail(email) + salt. */
25
+ emailHash: string;
26
+ /** Absolute filesystem path of the atomic index JSON file. */
27
+ filePath: string;
28
+ /** The index record stored in the file. */
29
+ record: IdentityIndexRecord;
30
+ }
31
+ //# sourceMappingURL=identity-index-types.d.mts.map
@@ -0,0 +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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=identity-index-types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity-index-types.mjs","sourceRoot":"","sources":["../../../src/serve-gib/identity-index/identity-index-types.mts"],"names":[],"mappings":""}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @module serve-gib
3
+ *
4
+ * Minimalist, high-observability HTTP & WebSocket microframework for ibgib servers.
5
+ */
6
+ export * from './types.mjs';
7
+ export * from './constants.mjs';
8
+ export * from './path-constants.mjs';
9
+ export * from './path-helper.mjs';
10
+ export * from './bootstrap-helper.mjs';
11
+ export * from './serve-gib-helpers.mjs';
12
+ export * from './serve-gib-v1.mjs';
13
+ export * from './keystone-schema-helpers.mjs';
14
+ export * from './identity-index/identity-index-types.mjs';
15
+ export * from './identity-index/identity-index-constants.mjs';
16
+ export * from './identity-index/identity-index-helpers.mjs';
17
+ export * from './identity-index/identity-index-service.mjs';
18
+ export * from './handlers/handler-base.mjs';
19
+ export * from './handlers/static-handler.mjs';
20
+ export * from './handlers/error-handler.mjs';
21
+ export * from './handlers/api/health.handler.mjs';
22
+ export * from './handlers/api/ibgib/ibgib-handler-types.mjs';
23
+ export * from './handlers/api/ibgib/ibgib.handler.mjs';
24
+ export * from './handlers/api/keystone/keystone-handler-types.mjs';
25
+ export * from './handlers/api/keystone/keystone-genesis.handler.mjs';
26
+ export * from './handlers/api/keystone/keystone-evolve.handler.mjs';
27
+ export * from './handlers/api/keystone/keystone-post.handler.mjs';
28
+ export * from './handlers/api/keystone/keystone-get.handler.mjs';
29
+ export * from './handlers/api/keystone/keystone-lookup.handler.mjs';
30
+ export * from './handlers/api/keystone/keystone-check-email.handler.mjs';
31
+ export * from './handlers/api/keystone/sso-config.handler.mjs';
32
+ export * from './handlers/api/keystone/sso-link.handler.mjs';
33
+ export * from './handlers/api/keystone/sso-login.handler.mjs';
34
+ export * from './handlers/api/email/email-inbound.handler.mjs';
35
+ export * from './handlers/api/email/email-outbound.handler.mjs';
36
+ export * from './handlers/api/debug/ws-echo.handler.mjs';
37
+ export * from './handlers/ws/ws-types.mjs';
38
+ export * from './handlers/ws/ws-helper.mjs';
39
+ export * from './handlers/ws/sync-upgrade-handler-base.mjs';
40
+ export * from './handlers/ws/sync-upgrade.handler.mjs';
41
+ import { ServeGibHandler } from './types.mjs';
42
+ export interface StandardHandlersOptions {
43
+ /** Absolute path to the client SPA static assets directory. */
44
+ clientDir?: string;
45
+ }
46
+ /**
47
+ * Returns the standard pipeline array of ibgib HTTP request handlers for serve-gib.
48
+ */
49
+ export declare function getStandardServeGibHandlers(opts?: StandardHandlersOptions): ServeGibHandler<any, any>[];
50
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * @module serve-gib
3
+ *
4
+ * Minimalist, high-observability HTTP & WebSocket microframework for ibgib servers.
5
+ */
6
+ export * from './types.mjs';
7
+ export * from './constants.mjs';
8
+ export * from './path-constants.mjs';
9
+ export * from './path-helper.mjs';
10
+ export * from './bootstrap-helper.mjs';
11
+ export * from './serve-gib-helpers.mjs';
12
+ export * from './serve-gib-v1.mjs';
13
+ export * from './keystone-schema-helpers.mjs';
14
+ export * from './identity-index/identity-index-types.mjs';
15
+ export * from './identity-index/identity-index-constants.mjs';
16
+ export * from './identity-index/identity-index-helpers.mjs';
17
+ export * from './identity-index/identity-index-service.mjs';
18
+ // Handlers
19
+ export * from './handlers/handler-base.mjs';
20
+ export * from './handlers/static-handler.mjs';
21
+ export * from './handlers/error-handler.mjs';
22
+ export * from './handlers/api/health.handler.mjs';
23
+ export * from './handlers/api/ibgib/ibgib-handler-types.mjs';
24
+ export * from './handlers/api/ibgib/ibgib.handler.mjs';
25
+ export * from './handlers/api/keystone/keystone-handler-types.mjs';
26
+ export * from './handlers/api/keystone/keystone-genesis.handler.mjs';
27
+ export * from './handlers/api/keystone/keystone-evolve.handler.mjs';
28
+ export * from './handlers/api/keystone/keystone-post.handler.mjs';
29
+ export * from './handlers/api/keystone/keystone-get.handler.mjs';
30
+ export * from './handlers/api/keystone/keystone-lookup.handler.mjs';
31
+ export * from './handlers/api/keystone/keystone-check-email.handler.mjs';
32
+ export * from './handlers/api/keystone/sso-config.handler.mjs';
33
+ export * from './handlers/api/keystone/sso-link.handler.mjs';
34
+ export * from './handlers/api/keystone/sso-login.handler.mjs';
35
+ export * from './handlers/api/email/email-inbound.handler.mjs';
36
+ export * from './handlers/api/email/email-outbound.handler.mjs';
37
+ export * from './handlers/api/debug/ws-echo.handler.mjs';
38
+ export * from './handlers/ws/ws-types.mjs';
39
+ export * from './handlers/ws/ws-helper.mjs';
40
+ export * from './handlers/ws/sync-upgrade-handler-base.mjs';
41
+ export * from './handlers/ws/sync-upgrade.handler.mjs';
42
+ import { HealthHandler } from './handlers/api/health.handler.mjs';
43
+ import { IbGibHandler } from './handlers/api/ibgib/ibgib.handler.mjs';
44
+ import { KeystoneGenesisHandler } from './handlers/api/keystone/keystone-genesis.handler.mjs';
45
+ import { KeystoneEvolveHandler } from './handlers/api/keystone/keystone-evolve.handler.mjs';
46
+ import { KeystonePostHandler } from './handlers/api/keystone/keystone-post.handler.mjs';
47
+ import { KeystoneGetHandler } from './handlers/api/keystone/keystone-get.handler.mjs';
48
+ import { KeystoneLookupHandler } from './handlers/api/keystone/keystone-lookup.handler.mjs';
49
+ import { KeystoneCheckEmailHandler } from './handlers/api/keystone/keystone-check-email.handler.mjs';
50
+ import { SsoLinkHandler } from './handlers/api/keystone/sso-link.handler.mjs';
51
+ import { SsoLoginHandler } from './handlers/api/keystone/sso-login.handler.mjs';
52
+ import { SsoConfigHandler } from './handlers/api/keystone/sso-config.handler.mjs';
53
+ import { EmailInboundHandler } from './handlers/api/email/email-inbound.handler.mjs';
54
+ import { EmailOutboundHandler } from './handlers/api/email/email-outbound.handler.mjs';
55
+ import { StaticFileHandler } from './handlers/static-handler.mjs';
56
+ /**
57
+ * Returns the standard pipeline array of ibgib HTTP request handlers for serve-gib.
58
+ */
59
+ export function getStandardServeGibHandlers(opts = {}) {
60
+ const handlers = [
61
+ new HealthHandler(),
62
+ new IbGibHandler(),
63
+ new KeystoneGenesisHandler(),
64
+ new KeystoneEvolveHandler(),
65
+ new KeystonePostHandler(),
66
+ new KeystoneGetHandler(),
67
+ new KeystoneLookupHandler(),
68
+ new KeystoneCheckEmailHandler(),
69
+ new SsoLinkHandler(),
70
+ new SsoLoginHandler(),
71
+ new SsoConfigHandler(),
72
+ new EmailInboundHandler(),
73
+ new EmailOutboundHandler(),
74
+ ];
75
+ if (opts.clientDir) {
76
+ handlers.push(new StaticFileHandler(opts.clientDir));
77
+ }
78
+ return handlers;
79
+ }
80
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Strict flatcase regex for individual tokens (username, role, deviceId, providerId).
3
+ * Lowercase alphanumeric characters only [a-z0-9], no hyphens or punctuation.
4
+ */
5
+ export declare const FLATCASE_TOKEN_REGEXP: RegExp;
6
+ /**
7
+ * Validates if a string token is strict flatcase ([a-z0-9]+).
8
+ */
9
+ export declare function validateFlatcaseToken(token: string): boolean;
10
+ /**
11
+ * Sanitizes an input string to strict flatcase ([a-z0-9]).
12
+ */
13
+ export declare function sanitizeToken(input: string): string;
14
+ /**
15
+ * Keystone Name Schema validation result.
16
+ */
17
+ export interface KeystoneNameSchemaResult {
18
+ valid: boolean;
19
+ type?: 'primary' | 'delegate';
20
+ username?: string;
21
+ role?: string;
22
+ deviceIdOrProviderId?: string;
23
+ error?: string;
24
+ }
25
+ /**
26
+ * Validates a keystone name string against the naming conventions:
27
+ * 1. Primary identity: `[username]` (e.g. `alice`)
28
+ * 2. Delegate: `[username]-[role]-[deviceIdOrProviderId]` (e.g. `alice-sync-browsera` or `alice-sync-google`)
29
+ *
30
+ * Enforces strict flatcase on all inner tokens (`[a-z0-9]+`).
31
+ */
32
+ export declare function validateKeystoneNameSchema(name: string): KeystoneNameSchemaResult;
33
+ /**
34
+ * Challenge Pool ID Schema validation result.
35
+ */
36
+ export interface ChallengePoolIdSchemaResult {
37
+ valid: boolean;
38
+ isForeign?: boolean;
39
+ who?: string;
40
+ what?: string;
41
+ providerId?: string;
42
+ error?: string;
43
+ }
44
+ /**
45
+ * Validates a challenge pool ID string against pool conventions:
46
+ * 1. Native/User-Owned pool: single flatcase word (e.g. `manage`, `default`, `revoke`, `sync`, `connect`).
47
+ * 2. Custodial/Foreign pool: `custodian-[what]-[providerId]` (e.g. `custodian-manage-google`, `custodian-revoke-github`).
48
+ */
49
+ export declare function validateChallengePoolIdSchema(poolId: string): ChallengePoolIdSchemaResult;
50
+ //# sourceMappingURL=keystone-schema-helpers.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystone-schema-helpers.d.mts","sourceRoot":"","sources":["../../src/serve-gib/keystone-schema-helpers.mts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,qBAAqB,QAAgB,CAAC;AAEnD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAG5D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,wBAAwB,CA8BjF;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IACxC,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,GAAG,2BAA2B,CA6BzF"}