@ibgib/node-gib 0.0.10 → 0.0.14

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,134 @@
1
+ import { iReckon, ifWe, respecfully } from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
2
+ import { createAwsSigV4Headers } from './aws/aws-sigv4-helper.mjs';
3
+ import { EmailReceiverAws } from './aws/email-receiver-aws.mjs';
4
+ import { formatEmailAddress, formatRawMimeString, parseEmailAddress, parseRawMimeHeaders, validateEmail } from './email-helpers.mjs';
5
+ import { EmailSenderMock } from './mock/email-sender-mock.mjs';
6
+
7
+ const sir = `[${import.meta.url}]`;
8
+
9
+ await respecfully(sir, 'Email Infrastructure & Drivers', async () => {
10
+
11
+ await ifWe(sir, 'validate email addresses accurately using validateEmail', async () => {
12
+ iReckon(sir, validateEmail('user@example.com')).asTo('valid email').isGonnaBe(true);
13
+ iReckon(sir, validateEmail('user.name+tag@domain.co.uk')).asTo('valid tagged email').isGonnaBe(true);
14
+ iReckon(sir, validateEmail('invalid-email')).asTo('invalid format without @').isGonnaBe(false);
15
+ iReckon(sir, validateEmail('user@')).asTo('missing domain').isGonnaBe(false);
16
+ iReckon(sir, validateEmail('')).asTo('empty string').isGonnaBe(false);
17
+ });
18
+
19
+ await ifWe(sir, 'parse and format email addresses correctly', async () => {
20
+ const parsed1 = parseEmailAddress('Alice <alice@example.com>');
21
+ iReckon(sir, parsed1.address).asTo('parsed address').isGonnaBe('alice@example.com');
22
+ iReckon(sir, parsed1.name).asTo('parsed name').isGonnaBe('Alice');
23
+
24
+ const formatted = formatEmailAddress({ name: 'Bob', address: 'bob@example.com' });
25
+ iReckon(sir, formatted).asTo('formatted address').isGonnaBe('"Bob" <bob@example.com>');
26
+ });
27
+
28
+ await ifWe(sir, 'format and parse raw MIME headers and strings', async () => {
29
+ const mimeStr = formatRawMimeString({
30
+ from: { name: 'Sender', address: 'sender@example.com' },
31
+ to: ['receiver@example.com'],
32
+ subject: 'Test Subject',
33
+ textBody: 'Hello World',
34
+ });
35
+
36
+ const headers = parseRawMimeHeaders(mimeStr);
37
+ iReckon(sir, headers['From']).asTo('MIME From header').isGonnaBe('"Sender" <sender@example.com>');
38
+ iReckon(sir, headers['Subject']).asTo('MIME Subject header').isGonnaBe('Test Subject');
39
+ });
40
+
41
+ await ifWe(sir, 'dispatch emails using EmailSenderMock and maintain history', async () => {
42
+ const mockSender = new EmailSenderMock();
43
+ mockSender.clearSentEmails();
44
+
45
+ const result = await mockSender.sendEmail({
46
+ from: 'test@example.com',
47
+ to: ['target@example.com'],
48
+ subject: 'Mock Subject',
49
+ textBody: 'Mock body',
50
+ });
51
+
52
+ iReckon(sir, result.success).asTo('mock send result success').isGonnaBe(true);
53
+ iReckon(sir, Boolean(result.messageId)).asTo('mock messageId generated').isGonnaBe(true);
54
+
55
+ const sent = mockSender.getSentEmails();
56
+ iReckon(sir, sent.length).asTo('sent emails count').isGonnaBe(1);
57
+ iReckon(sir, sent[0].subject).asTo('sent email subject').isGonnaBe('Mock Subject');
58
+
59
+ // Verify failure mode
60
+ mockSender.shouldFail = true;
61
+ const failResult = await mockSender.sendEmail({
62
+ from: 'test@example.com',
63
+ to: ['target@example.com'],
64
+ subject: 'Fail Subject',
65
+ textBody: 'Fail body',
66
+ });
67
+ iReckon(sir, failResult.success).asTo('mock send failure result success').isGonnaBe(false);
68
+ });
69
+
70
+ await ifWe(sir, 'calculate valid AWS SigV4 headers with createAwsSigV4Headers', async () => {
71
+ const sigResult = createAwsSigV4Headers({
72
+ method: 'POST',
73
+ url: 'https://email.us-east-1.amazonaws.com/',
74
+ region: 'us-east-1',
75
+ service: 'ses',
76
+ accessKeyId: 'AKIAIOSFODNN7EXAMPLE',
77
+ secretAccessKey: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
78
+ body: 'Action=SendEmail&Version=2010-12-01',
79
+ timestamp: new Date('2026-07-30T18:00:00.000Z'),
80
+ });
81
+
82
+ iReckon(sir, sigResult.amzDate).asTo('formatted X-Amz-Date').isGonnaBe('20260730T180000Z');
83
+ iReckon(sir, sigResult.headers['Host']).asTo('Host header').isGonnaBe('email.us-east-1.amazonaws.com');
84
+ iReckon(sir, sigResult.authorization.startsWith('AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20260730/us-east-1/ses/aws4_request')).asTo('authorization header credential prefix').isGonnaBe(true);
85
+ iReckon(sir, Boolean(sigResult.signature)).asTo('signature computed').isGonnaBe(true);
86
+ });
87
+
88
+ await ifWe(sir, 'parse SES webhook payloads and evaluate spam verdicts into inbox/junk folders', async () => {
89
+ const receiver = new EmailReceiverAws();
90
+
91
+ // Pass verdict payload
92
+ const passPayload = {
93
+ mail: {
94
+ messageId: 'msg-pass-123',
95
+ source: 'alice@example.com',
96
+ destination: ['bob@example.com'],
97
+ commonHeaders: { subject: 'Clean Mail' },
98
+ timestamp: '2026-07-30T18:00:00Z',
99
+ },
100
+ receipt: {
101
+ spamVerdict: { status: 'PASS' },
102
+ virusVerdict: { status: 'PASS' },
103
+ spfVerdict: { status: 'PASS' },
104
+ dkimVerdict: { status: 'PASS' },
105
+ },
106
+ content: 'Clean body',
107
+ };
108
+
109
+ const parsedPass = await receiver.parseInboundPayload(passPayload);
110
+ iReckon(sir, parsedPass.folder).asTo('clean email folder').isGonnaBe('inbox');
111
+ iReckon(sir, parsedPass.from.address).asTo('parsed from address').isGonnaBe('alice@example.com');
112
+ iReckon(sir, parsedPass.subject).asTo('parsed subject').isGonnaBe('Clean Mail');
113
+
114
+ // Fail verdict payload
115
+ const failPayload = {
116
+ mail: {
117
+ messageId: 'msg-spam-456',
118
+ source: 'spammer@badsite.com',
119
+ destination: ['bob@example.com'],
120
+ commonHeaders: { subject: 'Buy Cheap Stuff' },
121
+ },
122
+ receipt: {
123
+ spamVerdict: { status: 'FAIL' },
124
+ virusVerdict: { status: 'PASS' },
125
+ spfVerdict: { status: 'FAIL' },
126
+ dkimVerdict: { status: 'PASS' },
127
+ },
128
+ };
129
+
130
+ const parsedFail = await receiver.parseInboundPayload(failPayload);
131
+ iReckon(sir, parsedFail.folder).asTo('spam email folder').isGonnaBe('junk');
132
+ });
133
+
134
+ });
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Interfaces and types for email architecture in node-gib.
3
+ */
4
+
5
+ export interface EmailAddress {
6
+ address: string;
7
+ name?: string;
8
+ }
9
+
10
+ export interface OutboundEmail {
11
+ from: EmailAddress | string;
12
+ to: (EmailAddress | string)[];
13
+ cc?: (EmailAddress | string)[];
14
+ bcc?: (EmailAddress | string)[];
15
+ subject: string;
16
+ textBody?: string;
17
+ htmlBody?: string;
18
+ replyTo?: EmailAddress | string;
19
+ headers?: Record<string, string>;
20
+ }
21
+
22
+ export interface EmailSpamVerdicts {
23
+ spamVerdict: 'PASS' | 'FAIL' | 'GRAY' | string;
24
+ virusVerdict?: 'PASS' | 'FAIL' | 'GRAY' | string;
25
+ spfVerdict?: 'PASS' | 'FAIL' | 'GRAY' | string;
26
+ dkimVerdict?: 'PASS' | 'FAIL' | 'GRAY' | string;
27
+ dmarcVerdict?: 'PASS' | 'FAIL' | 'GRAY' | string;
28
+ }
29
+
30
+ export interface InboundEmail {
31
+ messageId: string;
32
+ from: EmailAddress;
33
+ to: EmailAddress[];
34
+ cc?: EmailAddress[];
35
+ subject: string;
36
+ textBody?: string;
37
+ htmlBody?: string;
38
+ rawMime?: string;
39
+ receivedAt: string;
40
+ spamVerdicts?: EmailSpamVerdicts;
41
+ folder?: 'inbox' | 'junk' | string;
42
+ headers?: Record<string, string>;
43
+ }
44
+
45
+ export interface EmailSendResult {
46
+ success: boolean;
47
+ messageId?: string;
48
+ error?: string;
49
+ statusCode?: number;
50
+ }
51
+
52
+ export interface EmailSender {
53
+ sendEmail(email: OutboundEmail): Promise<EmailSendResult>;
54
+ }
55
+
56
+ export interface EmailReceiver {
57
+ parseInboundPayload(payload: any): Promise<InboundEmail>;
58
+ evaluateSpamVerdicts(verdicts: EmailSpamVerdicts): 'inbox' | 'junk';
59
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Email infrastructure module exports.
3
+ */
4
+
5
+ export * from './email-constants.mjs';
6
+ export * from './email-types.mjs';
7
+ export * from './email-helpers.mjs';
8
+ export * from './email-sender.mjs';
9
+ export * from './email-receiver.mjs';
10
+ export * from './aws/index.mjs';
11
+ export * from './mock/index.mjs';
@@ -0,0 +1,54 @@
1
+ /**
2
+ * In-memory mock implementation of EmailSenderBase for unit testing.
3
+ */
4
+
5
+ import { EmailSenderBase } from '../email-sender.mjs';
6
+ import { EmailSendResult, OutboundEmail } from '../email-types.mjs';
7
+
8
+ export class EmailSenderMock extends EmailSenderBase {
9
+ private sentEmails: OutboundEmail[] = [];
10
+ public shouldFail: boolean = false;
11
+ public failureMessage: string = 'Mock send failure';
12
+
13
+ async sendEmail(email: OutboundEmail): Promise<EmailSendResult> {
14
+ try {
15
+ this.validateOutboundEmail(email);
16
+
17
+ if (this.shouldFail) {
18
+ return {
19
+ success: false,
20
+ error: this.failureMessage,
21
+ statusCode: 500,
22
+ };
23
+ }
24
+
25
+ this.sentEmails.push({ ...email });
26
+ const messageId = `mock-msg-${Date.now()}-${this.sentEmails.length}`;
27
+
28
+ return {
29
+ success: true,
30
+ messageId,
31
+ statusCode: 200,
32
+ };
33
+ } catch (error: any) {
34
+ return {
35
+ success: false,
36
+ error: error?.message || String(error),
37
+ };
38
+ }
39
+ }
40
+
41
+ /**
42
+ * Gets array of all emails sent through this mock sender.
43
+ */
44
+ getSentEmails(): OutboundEmail[] {
45
+ return [...this.sentEmails];
46
+ }
47
+
48
+ /**
49
+ * Clears recorded sent emails.
50
+ */
51
+ clearSentEmails(): void {
52
+ this.sentEmails = [];
53
+ }
54
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Mock email driver exports.
3
+ */
4
+
5
+ export * from './email-sender-mock.mjs';
package/src/index.mts ADDED
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @module @ibgib/node-gib
3
+ *
4
+ * Node.js-specific ibgib witnesses, filesystem spaces, and serve-gib microframework.
5
+ */
6
+
7
+ export * from './constants.mjs';
8
+ export * from './foo.mjs';
9
+ export * from './helpers.mjs';
10
+ export * from './types.mjs';
11
+
12
+ // serve-gib microframework
13
+ export * from './serve-gib/index.mjs';
14
+
15
+ // email infrastructure
16
+ export {
17
+ DEFAULT_EMAIL_CHARSET,
18
+ EMAIL_MODE_AWS,
19
+ EMAIL_MODE_MOCK,
20
+ DEFAULT_AWS_REGION,
21
+ DEFAULT_AWS_SES_ENDPOINT,
22
+ DEFAULT_AWS_SERVICE,
23
+ VERDICT_PASS,
24
+ VERDICT_FAIL,
25
+ VERDICT_GRAY,
26
+ FOLDER_INBOX,
27
+ FOLDER_JUNK,
28
+ parseEmailAddress,
29
+ formatEmailAddress,
30
+ parseRawMimeHeaders,
31
+ formatRawMimeString,
32
+ validateEmail,
33
+ validateEmailAddress,
34
+ EmailSenderBase,
35
+ EmailReceiverBase,
36
+ createAwsSigV4Headers,
37
+ EmailSenderAws,
38
+ EmailReceiverAws,
39
+ EmailSenderMock,
40
+ } from './email/index.mjs';
41
+ export type * from './email/email-types.mjs';
@@ -134,7 +134,7 @@ if (respecGib.errorMsgs.length === 0) {
134
134
  * @param found respec paths already found (used in recursive calls)
135
135
  * @returns list of all respec paths according to the respec regexp constant {@link RESPEC_FILE_REG_EXP}
136
136
  */
137
- async function getRespecFileFullPaths(dirPath: string, found: string[]): Promise<string[]> {
137
+ async function getRespecFileFullPaths(dirPath: string, found: string[] = []): Promise<string[]> {
138
138
  const lc = `[${getRespecFileFullPaths.name}][${dirPath}]`;
139
139
  try {
140
140
  if (logalot) { console.log(`${lc} starting... (I: 16026290523925f79ba1933847e2a623)`); }
@@ -154,13 +154,12 @@ async function getRespecFileFullPaths(dirPath: string, found: string[]): Promise
154
154
  }
155
155
  });
156
156
 
157
- found = found.concat(files);
157
+ found.push(...files);
158
158
  for (let i = 0; i < dirs.length; i++) {
159
- const subfound = await getRespecFileFullPaths(dirs[i], found);
160
- found = found.concat(subfound);
159
+ await getRespecFileFullPaths(dirs[i], found);
161
160
  }
162
161
  return Array.from(new Set(found)); // unique
163
- } catch (error) {
162
+ } catch (error: any) {
164
163
  console.error(`${lc} ${error.message}`);
165
164
  throw error;
166
165
  } finally {
@@ -0,0 +1,34 @@
1
+ # serve-gib changelog
2
+
3
+ _note: as you implement features/fixes/etc., please document them here under the "Working Version" section._
4
+
5
+ ## Working Version
6
+
7
+ * refactor: relocated `serve-gib` microframework into `@ibgib/node-gib`
8
+ * Relocated microframework, pipeline orchestrator, and route handlers into `@ibgib/node-gib/src/serve-gib/`.
9
+ * Added `getStandardServeGibHandlers(opts)` preset helper function in `@ibgib/node-gib/dist/serve-gib/index.mjs`.
10
+ * Exported complete handler suite (`HealthHandler`, `IbGibGetHandler`, `IbGibPostHandler`, `KeystoneGenesisHandler`, `KeystoneEvolveHandler`, `SsoConfigHandler`, `SsoLinkHandler`, `SsoLoginHandler`, `StaticFileHandler`, `SyncUpgradeHandler`, `ErrorHandler`).
11
+
12
+ * impl: initial core infrastructure
13
+ * defined `RouteInfo`, `ResponseResult`, and `ServeGibHandler` foundational types.
14
+ * implemented `ServeGib_V1` with pipeline-based request processing.
15
+ * added robust `try..catch..finally` pattern with built-in access logging and timing.
16
+ * impl: handler "pit of success" plumbing
17
+ * implemented `ServeGibHandlerBase` abstract class to reduce boilerplate.
18
+ * automated route matching via `canHandleRoute` and `regex` properties.
19
+ * implemented `handleRouteImpl` pattern to separate plumbing from business logic.
20
+ * added generic `TQueryParams` support with automated parsing via `parseQueryParams`.
21
+ * feat: hierarchical handler organization
22
+ * established folder-based grouping mirroring URL paths (e.g., `handlers/api/ibgib/`).
23
+ * enforced "one handler per hard route" and "one handler per file" architectural guidelines.
24
+ * feat: concrete core handlers
25
+ * `HealthHandler`: Simple liveness probe.
26
+ * `IbGibHandler`: Single ibGib address resolution.
27
+ * `IbGibGraphHandler`: Complex graph/BFS retrieval.
28
+ * `KeystoneHandler`: Genesis and evolution turn persistence.
29
+ * `StaticFileHandler`: High-performance asset serving with SPA history fallback.
30
+ * `ErrorHandler`: Standardized 404 and fatal error reporting.
31
+ * docs: architectural guidance
32
+ * created `README.md` with detailed guidance on handler philosophy and plumbing usage.
33
+ * test: validation suite
34
+ * implemented `serve-gib.respec.mts` verifying orchestrator pipeline and `RouteInfo` construction.
@@ -0,0 +1,77 @@
1
+ # serve-gib Microframework
2
+
3
+ A minimalist, high-observability HTTP microframework for ibgib servers, hosted within `@ibgib/node-gib`.
4
+
5
+ ---
6
+
7
+ ## 🚀 Quickstart & Standard Presets
8
+
9
+ Downstream Node.js server applications (such as `space-gib`) can instantiate a fully functional ibgib server using `getStandardServeGibHandlers(opts)` preset helper exported from `@ibgib/node-gib`:
10
+
11
+ ```typescript
12
+ import { ServeGib_V1, getStandardServeGibHandlers } from '@ibgib/node-gib/dist/serve-gib/index.mjs';
13
+
14
+ const handlers = await getStandardServeGibHandlers({
15
+ dataDir: process.env.DATA_DIR ?? './data',
16
+ clientDir: process.env.CLIENT_DIR ?? './dist/client',
17
+ ssoServerKdfSecret: process.env.SSO_SERVER_KDF_SECRET,
18
+ googleClientId: process.env.GOOGLE_CLIENT_ID,
19
+ });
20
+
21
+ const server = new ServeGib_V1({ handlers, port: 3000 });
22
+ await server.listen();
23
+ ```
24
+
25
+ ---
26
+
27
+ ## 🏛️ Architecture & Guidance
28
+
29
+ ### 1. Handler Philosophy
30
+ * **One handler per "hard" route**: A handler should correspond to a unique URL path pattern, disregarding query parameters.
31
+ * **One regex per handler**: Concrete handlers should ideally define a single `regex` property for routing.
32
+ * **One handler per file**: Each route handler should live in its own file within the `handlers/` directory (e.g., `handlers/api/health.handler.mts`).
33
+ * The subfolders should match the hard route of the handler, e.g., `api/ibgib` route should be in the `handlers/api/ibgib` subfolder.
34
+
35
+ ### 2. The "Pit of Success" Plumbing
36
+ The `ServeGibHandlerBase` class provides built-in plumbing to reduce boilerplate:
37
+ * **`handleRoute` (Plumbing)**: Automatically checks `canHandleRoute`, parses query parameters, and provides a top-level `try..catch` block for logging and error reporting.
38
+ * **`handleRouteImpl` (Implementation)**: This is where the core logic of the handler resides.
39
+ * **`canHandleRoute`**: Defaults to a regex match on `info.pathname`. Override this for more complex routing logic.
40
+
41
+ ### 3. Query Parameters
42
+ Query parameters are handled via the `parseQueryParams` method in the base class.
43
+ * By default, it parses URL search params into a key-value object.
44
+ * Handlers can override this method to perform custom parsing or validation (e.g., parsing JSON strings from query params).
45
+ * The base class is generic: `ServeGibHandlerBase<TQueryParams = any>`.
46
+
47
+ ### 4. RouteInfo
48
+ The `RouteInfo` object provides an enriched view of the incoming request:
49
+ * `decodedPathSegments`: Pre-split and decoded path parts.
50
+ * `protocol`, `method`, `body`: Basic HTTP info.
51
+ * `queryParams`: The result of the handler's `parseQueryParams` call.
52
+
53
+ ---
54
+
55
+ ## ⚙️ Pipeline Order & Built-In Handlers
56
+
57
+ The `ServeGib_V1` executes handlers in the order they are provided in the `handlers` array. The first handler to return a non-undefined `ResponseResult` wins.
58
+ * **Tip**: Order specific routes (like `/api/ibgib/graph`) before more general ones (like `/api/ibgib`).
59
+ * **Built-in Handlers**:
60
+ * `HealthHandler`: Liveness probe (`GET /api/health`).
61
+ * `IbGibGetHandler` / `IbGibPostHandler`: Single ibGib retrieval and mutation (`GET/POST /api/ibgib`).
62
+ * `KeystoneGenesisHandler` / `KeystoneEvolveHandler`: Keystone genesis & timeline evolution.
63
+ * `SsoConfigHandler` / `SsoLinkHandler` / `SsoLoginHandler`: SSO identity endpoints.
64
+ * `StaticFileHandler`: SPA asset serving with index fallback.
65
+ * `SyncUpgradeHandler`: WebSocket sync protocol.
66
+ * `ErrorHandler`: Final catch-all for 404s and fatal errors.
67
+
68
+ ---
69
+
70
+ ## 🐳 Docker / Server Resilience Note
71
+ When deploying or running this service within a Docker environment, specify a restart policy:
72
+ ```yaml
73
+ services:
74
+ space-gib:
75
+ restart: unless-stopped
76
+ ```
77
+ This ensures auto-recovery if the node process restarts due to unhandled network events (such as raw TCP socket `ECONNRESET` exceptions from client refreshes).
@@ -0,0 +1,112 @@
1
+ # serve-gib Refactoring & Relocation Implementation Guide & Diary
2
+
3
+ This document serves as the persistent architectural roadmap, environmental context guide, implementation diary, and active TODO list for moving `serve-gib` into `@ibgib/node-gib` and DRYing out `space-gib` server/client components.
4
+
5
+ ---
6
+
7
+ ## 1. Environment & Operational Context
8
+
9
+ * **Environment**: Windows OS environment.
10
+ * *Pathing Note*: Windows backslashes (`\`) may appear in local shell paths or UI references, but all code imports, config paths, and TS/JS references must use standard forward slashes (`/`).
11
+ * **Token & Testing Constraint**:
12
+ * **STRICT RULE**: NO automated agentic browser testing (e.g. Playwright, Puppeteer, Selenium) is permitted during development or verification.
13
+ * **Rationale**: Specifically avoids massive LLM token consumption resulting from screenshot/image generation during automated agentic browser runs. All UI/browser verification must be performed manually by the user or verified via fast microtests.
14
+ * **Build System Mechanics**:
15
+ * The monorepo uses a custom build system located under `/build`.
16
+ * **Dependency Build Chains**:
17
+ * Changes in `core-gib` require building downstream packages: `npm run chain:build:core-gib` (`build:core-gib` -> `build:web-gib` -> `build:node-gib` -> `build:space-gib`).
18
+ * Changes in `web-gib` require: `npm run chain:build:web-gib` (`web-gib` -> `space-gib`).
19
+ * Changes in `node-gib` use chain build script: `npm run chain:build:node-gib` (`build:node-gib` -> `build:space-gib`).
20
+ * **Testing Framework (`respec-gib`)**:
21
+ * All unit and integration tests use ibgib's custom microtesting framework (`respec-gib`), located in `@ibgib/helper-gib/dist/respec-gib`.
22
+ * **Commands**:
23
+ * Run node-gib tests: `npm run test:node-gib`
24
+ * Run core-gib tests: `npm run test:core-gib`
25
+ * Run space-gib tests: `npm run test:space-gib`
26
+ * **Structure**:
27
+ * `respecfully`: Outer suite block (async, must `await`).
28
+ * `ifWe`: Test case block (async, must `await`).
29
+ * `ifWeMight`: Focused test case (async, equivalent to `fit` / `it.only`).
30
+ * `iReckon`: Synchronous assertion fluent API (`willEqual`, `isGonnaBe`, `isGonnaBeTrue`, `includes`, etc.).
31
+ * Test runner scripts exist per library/app (e.g. `libs/node-gib/src/respec-gib.node.mts`).
32
+
33
+ ---
34
+
35
+ ## 2. Project Architecture & Strategy
36
+
37
+ ### Two Primary Phases
38
+
39
+ 1. **Phase 1: Server Refactoring & `serve-gib` Migration** [COMPLETE]
40
+ * Relocate `serve-gib` microframework from `apps/space-gib/src/server/serve-gib` into `libs/node-gib`.
41
+ * Package built-in handlers (`HealthHandler`, `IbGibHandler`, `KeystoneGenesisHandler`, `KeystoneEvolveHandler`, `KeystonePostHandler`, `KeystoneGetHandler`, `SsoLinkHandler`, `SsoLoginHandler`, `SsoConfigHandler`, `StaticFileHandler`, `SyncUpgradeHandler`, `ErrorHandler`).
42
+ * Provide a clean, strongly-typed TypeScript configuration API via `.mts` options and preset helpers (`getStandardServeGibHandlers(...)`), combining with runtime `.env` / `process.env` configuration.
43
+ * Support handler subclassing or custom handler arrays for app-specific endpoints.
44
+ * Refactor `apps/space-gib/src/server/server.mts` to be a clean, minimal consumer of `@ibgib/node-gib`.
45
+
46
+ 2. **Phase 2: Client UI Component Refactoring & DRYing** [COMPLETE]
47
+ * Extract reusable UI components (`identity-header`, `identity-manager`, `keystone-creator`, `keystone-details`, `keystone-scrubber`) from `apps/space-gib/src/client/components/` into `@ibgib/web-gib`.
48
+ * **API Bridge Abstraction**: Introduced `IbGibApiBridge` base class and `getApiBridge()/setApiBridge()` accessors in `@ibgib/web-gib`, letting downstream apps extend or configure their own REST bridge.
49
+ * **Constructor & State Architecture**:
50
+ * Components use `getComponentCtorArg(globalThisKey?)` directly from `@ibgib/web-gib/dist/app-bootstrap/init-orchestration.mjs` to decouple constructor dependencies.
51
+ * Components use `@ibgib/web-gib` ambient context (`getIbGibGlobalThis()`) and event constants (`EVENT_IBGIB_UI_MESSAGE`, `EVENT_IBGIB_IDENTITY_CHANGED`, `EVENT_IBGIB_IDENTITY_REQUEST_CHANGE`), avoiding string literals.
52
+ * Transformed `space-gib` into a clean, boilerplate template application consuming `@ibgib/web-gib` identity components via single-line `registerStandardIdentityComponents()` call.
53
+
54
+ ---
55
+
56
+ ## 3. Configuration Design (.env + .mts Programmatic Options)
57
+
58
+ Rather than maintaining a separate JSON schema/config system, we leverage:
59
+ 1. **Runtime Environment Variables (`.env`)**: Standard environment variables (`PORT`, `DATA_DIR`, `CLIENT_DIR`, `SSO_SERVER_KDF_SECRET`, `SESSION_SECRET`, `GOOGLE_CLIENT_ID`) read via `process.env`.
60
+ 2. **TypeScript Options & Presets (`.mts`)**: Programmatic, strongly-typed `ServeGibOptions` passed to `ServeGib_V1` or helper functions like `getStandardServeGibHandlers(options)`.
61
+ 3. **Subclassing / Custom Handlers**: Apps can extend `ServeGibHandlerBase` or `ServeGib_V1` to add custom routes or hooks as needed.
62
+
63
+ ---
64
+
65
+ ## 4. Implementation Checklist & Todo List
66
+
67
+ ### Phase 1: Server Move & `serve-gib` Migration (`libs/node-gib`)
68
+ - [x] **Build System Updates (`package.json`)**:
69
+ - [x] Update `"chain:build:core-gib"` in root `package.json` to include `build:node-gib`.
70
+ - [x] Add `"chain:build:node-gib": "npm run build:node-gib && npm run build:space-gib"` to root `package.json`.
71
+ - [x] **Copy & Adapt Files**: Move `serve-gib` source files and server helpers (`bootstrap-helper`, `path-helper`, `path-constants`, `metaspace-nodeindexedspace`) into `libs/node-gib/src/serve-gib/`.
72
+ - [x] **Handler Presets & Options**: Export handler classes and preset helpers (`getStandardServeGibHandlers`) from `@ibgib/node-gib`.
73
+ - [x] **Node-Gib Respec Tests**: Verify `respec-gib` tests in `libs/node-gib` running via `npm run test:node-gib`.
74
+ - [x] **Space-Gib Server Refactor**: Refactor `apps/space-gib/src/server/server.mts` to import `serve-gib` and handlers directly from `@ibgib/node-gib`.
75
+ - [x] **Clean Up Space-Gib Server**: Delete old duplicated `serve-gib` folder and server helper files from `apps/space-gib/src/server/`.
76
+ - [x] **Verification**: Execute `npm run chain:build:node-gib` and verify clean 0-error compilation and bundling of both `node-gib` and `space-gib`.
77
+
78
+ ### Phase 2: Client Component Refactoring (`web-gib` / `space-gib`)
79
+ - [x] **Create `IbGibApiBridge` Base**: Create `IbGibApiBridge` base class and `getApiBridge()`/`setApiBridge()` accessors in `@ibgib/web-gib/src/api/ibgib-api-bridge.mts`.
80
+ - [x] **Audit Client Components**: Inventory components in `apps/space-gib/src/client/components/` (`identity-header`, `identity-manager`, `keystone-creator`, `keystone-details`, `keystone-scrubber`).
81
+ - [x] **Decouple Constructor & Shared State**: Update component constructors to import `getComponentCtorArg()` from `@ibgib/web-gib/dist/app-bootstrap/init-orchestration.mjs`, use `getApiBridge()`, and use `EVENT_IBGIB_UI_MESSAGE` constants.
82
+ - [x] **Migrate Shared UI to `web-gib`**: Move reusable web components to `libs/web-gib/src/ui/component/identity/`.
83
+ - [x] **Export Identity Component Presets**: Add `registerStandardIdentityComponents()` to `@ibgib/web-gib`.
84
+ - [x] **Space-Gib Client Simplification**: Refactor `SpaceGibApiBridge` to extend `IbGibApiBridge` and refactor `apps/space-gib/src/client/` to import identity components from `@ibgib/web-gib`.
85
+ - [x] **Verification**: Run `npm run chain:build:web-gib` and manually verify SPA functionality in browser without automated agentic browser tests.
86
+
87
+ ---
88
+
89
+ ## 5. Implementation Diary & Notes
90
+
91
+ * **2026-07-22**: Initialized implementation tracking file. Defined operational rules (Windows pathing, no automated browser testing, build chain commands).
92
+ * **2026-07-22 Update**: Streamlined server configuration design to `.env` + `.mts` programmatic options and presets (skipping JSON config/schema). Added `node-gib` to `chain:build:core-gib`, confirmed `npm run test:node-gib` usage, and noted global/shared state handling for Phase 2 client components.
93
+ * **2026-07-22 Phase 1 Execution**:
94
+ * Relocated `serve-gib` microframework, handlers, and server helpers (`bootstrap-helper`, `path-helper`, `metaspace-nodeindexedspace`) to `libs/node-gib/src/serve-gib/`.
95
+ * Updated root `package.json` to include `node-gib` in `chain:build:core-gib` and added `chain:build:node-gib`.
96
+ * Created `getStandardServeGibHandlers(opts)` preset helper function in `libs/node-gib/src/serve-gib/index.mts`.
97
+ * Updated all relative import depths and resolved `GLOBAL_LOG_A_LOT` export ambiguity.
98
+ * Refactored `apps/space-gib/src/server/server.mts` to use `@ibgib/node-gib/dist/serve-gib/index.mjs` directly, reducing `server.mts` to under 60 lines of minimal setup code.
99
+ * Removed legacy duplicated `serve-gib` folder and server helper files from `apps/space-gib/src/server/`.
100
+ * Verified build with `npm run chain:build:node-gib` — 0 errors, both server and client bundle cleanly.
101
+ * **2026-07-22 Phase 2 Plan & Execution**:
102
+ * Created `IbGibApiBridge` base class (`libs/web-gib/src/api/ibgib-api-bridge.mts`) with `getApiBridge()`/`setApiBridge()` accessors.
103
+ * Refactored `SpaceGibApiBridge` to extend `IbGibApiBridge` and register itself on app bootstrap.
104
+ * Extracted the 5 Keystone Identity UI components (`identity-header`, `identity-manager`, `keystone-creator`, `keystone-details`, `keystone-scrubber`) into `libs/web-gib/src/ui/component/identity/`.
105
+ * Made `globalThisKey` optional in `getComponentCtorArg()` in `init-orchestration.mts` to decouple constructor initialization.
106
+ * Replaced all string literals with `EVENT_IBGIB_UI_MESSAGE` and event constants from `@ibgib/web-gib`.
107
+ * Created `custom.d.ts` in `libs/web-gib/src/` to declare `.html` and `.css` module types for `tsc`.
108
+ * Updated `build-web-gib.mts` build script to copy `.html` and `.css` component template assets recursively from `src/` to `dist/`.
109
+ * Added `registerStandardIdentityComponents()` to `@ibgib/web-gib`.
110
+ * Refactored `apps/space-gib/src/client/ui/shell/space-gib-shell-service.mts` to register identity components in a single line.
111
+ * Deleted local duplicate component folders from `apps/space-gib/src/client/components/`.
112
+ * Verified compilation and bundling via `npm run chain:build:web-gib` — 0 errors across web-gib and space-gib!