@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,98 @@
1
+ import { existsSync, rmSync, mkdirSync } from 'node:fs';
2
+ import { respecfully, iReckon, ifWe } from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
3
+ const sir = `[${import.meta.url}]`;
4
+ import { getIbGibAddr } from '@ibgib/ts-gib/dist/helper.mjs';
5
+ import { KeystoneService_V1 } from '@ibgib/core-gib/dist/keystone/keystone-service-v1.mjs';
6
+ import { createStandardPoolConfig } from '@ibgib/core-gib/dist/keystone/keystone-config-builder.mjs';
7
+ import { POOL_ID_DEFAULT } from '@ibgib/core-gib/dist/keystone/keystone-constants.mjs';
8
+ import { GLOBAL_LOG_A_LOT } from '../../../constants.mjs';
9
+ import { ServeGib_V1 } from '../../../serve-gib-v1.mjs';
10
+ import { KeystonePostHandler } from './keystone-post.handler.mjs';
11
+ import { KeystoneGetHandler } from './keystone-get.handler.mjs';
12
+ import { ErrorHandler } from '../../error-handler.mjs';
13
+ const logalot = GLOBAL_LOG_A_LOT;
14
+ class MockMetaspace {
15
+ async getLocalUserSpace() { return new MockSpace(); }
16
+ async put() { }
17
+ async registerNewIbGib() { }
18
+ }
19
+ class MockSpace {
20
+ async witness() { return { data: { success: true } }; }
21
+ }
22
+ await respecfully(sir, 'Keystone GET Integration', async () => {
23
+ const testDataDir = './test-data-get';
24
+ const port = 3003;
25
+ // Clean test data
26
+ if (existsSync(testDataDir)) {
27
+ try {
28
+ rmSync(testDataDir, { recursive: true, force: true, maxRetries: 5, retryDelay: 100 });
29
+ }
30
+ catch { /* ignore */ }
31
+ }
32
+ mkdirSync(testDataDir, { recursive: true });
33
+ await ifWe(sir, 'retrieve a keystone chain via GET /api/keystone/:addr', async () => {
34
+ const keystoneService = new KeystoneService_V1();
35
+ const config = createStandardPoolConfig({ id: POOL_ID_DEFAULT, salt: POOL_ID_DEFAULT });
36
+ // 1. Setup ServeGib_V1 with both POST and GET handlers
37
+ const serveGib = new ServeGib_V1({
38
+ port,
39
+ dataDir: testDataDir,
40
+ handlers: [
41
+ new KeystonePostHandler(),
42
+ new KeystoneGetHandler(),
43
+ ],
44
+ errorHandler: new ErrorHandler()
45
+ });
46
+ // 2. Generate and POST genesis
47
+ const genesis = await keystoneService.genesis({
48
+ masterSecret: 'AliceSecret',
49
+ configs: [config],
50
+ metaspace: new MockMetaspace(),
51
+ space: new MockSpace(),
52
+ });
53
+ const addr = getIbGibAddr({ ibGib: genesis });
54
+ const postReq = {
55
+ url: '/api/keystone',
56
+ method: 'POST',
57
+ headers: { 'ibgib-domain': addr, 'content-type': 'application/json' },
58
+ on: (event, cb) => {
59
+ if (event === 'data') {
60
+ cb(Buffer.from(JSON.stringify({ ibGibs: [genesis] })));
61
+ }
62
+ if (event === 'end') {
63
+ cb();
64
+ }
65
+ }
66
+ };
67
+ const postRes = {
68
+ writeHead: () => { },
69
+ end: () => { },
70
+ };
71
+ await serveGib.handleRequest(postReq, postRes);
72
+ // 3. Mock GET Request
73
+ const getReq = {
74
+ url: `/api/keystone/${encodeURIComponent(addr)}`,
75
+ method: 'GET',
76
+ headers: { 'ibgib-domain': addr },
77
+ on: (event, cb) => {
78
+ if (event === 'end') {
79
+ cb();
80
+ }
81
+ }
82
+ };
83
+ let capturedStatus = 0;
84
+ let capturedBody = null;
85
+ const getRes = {
86
+ writeHead: (status) => { capturedStatus = status; },
87
+ end: (body) => { capturedBody = JSON.parse(body); },
88
+ };
89
+ // 4. Handle GET
90
+ await serveGib.handleRequest(getReq, getRes);
91
+ // 5. Verify
92
+ iReckon(sir, capturedStatus).asTo('captured status code').isGonnaBe(200);
93
+ iReckon(sir, capturedBody.domainGraph).asTo('captured body domainGraph').isGonnaBeTruthy();
94
+ const graphKeys = Object.keys(capturedBody.domainGraph || {});
95
+ iReckon(sir, graphKeys.length > 0).asTo('domainGraph has keys').isGonnaBe(true);
96
+ });
97
+ });
98
+ //# sourceMappingURL=keystone-get.respec.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystone-get.respec.mjs","sourceRoot":"","sources":["../../../../../src/serve-gib/handlers/api/keystone/keystone-get.respec.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { DomainInfo } from "../../../types.mjs";
2
+ export interface KeystoneParams {
3
+ domainInfo: DomainInfo;
4
+ }
5
+ export declare const DEFAULT_QUERY_PARAMS_GET_KEYSTONE: {
6
+ /**
7
+ * If true, will get the latest keystone frame.
8
+ */
9
+ getLatest: boolean;
10
+ /**
11
+ * If true, will get the keystone's entire dependency graph
12
+ */
13
+ getGraph: boolean;
14
+ };
15
+ /**
16
+ * @see {@link DEFAULT_QUERY_PARAMS_GET_KEYSTONE} key/values for jsdocs
17
+ */
18
+ export type KeystoneGetQueryParams = Partial<typeof DEFAULT_QUERY_PARAMS_GET_KEYSTONE>;
19
+ export type KNOWN_QUERY_PARAMS_KEYSTONE_GET = keyof KeystoneGetQueryParams;
20
+ export declare const KNOWN_QUERY_PARAMS_KEYSTONE_GET: KNOWN_QUERY_PARAMS_KEYSTONE_GET[];
21
+ export declare function isKnownQueryParamsKey_KeystoneGet(key: any): key is KNOWN_QUERY_PARAMS_KEYSTONE_GET;
22
+ //# sourceMappingURL=keystone-handler-types.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystone-handler-types.d.mts","sourceRoot":"","sources":["../../../../../src/serve-gib/handlers/api/keystone/keystone-handler-types.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC3B,UAAU,EAAE,UAAU,CAAC;CAC1B;AAGD,eAAO,MAAM,iCAAiC;IAC1C;;OAEG;IACH,SAAS;IACT;;OAEG;IACH,QAAQ;CACX,CAAC;AACF;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC,OAAO,iCAAiC,CAAC,CAAC;AACvF,MAAM,MAAM,+BAA+B,GAAG,MAAM,sBAAsB,CAAC;AAC3E,eAAO,MAAM,+BAA+B,EAAqD,+BAA+B,EAAE,CAAC;AACnI,wBAAgB,iCAAiC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,+BAA+B,CAIlG"}
@@ -0,0 +1,19 @@
1
+ // #region KeystoneGetQueryParams
2
+ export const DEFAULT_QUERY_PARAMS_GET_KEYSTONE = {
3
+ /**
4
+ * If true, will get the latest keystone frame.
5
+ */
6
+ getLatest: true,
7
+ /**
8
+ * If true, will get the keystone's entire dependency graph
9
+ */
10
+ getGraph: true,
11
+ };
12
+ export const KNOWN_QUERY_PARAMS_KEYSTONE_GET = Object.keys(DEFAULT_QUERY_PARAMS_GET_KEYSTONE);
13
+ export function isKnownQueryParamsKey_KeystoneGet(key) {
14
+ return !!key && typeof key === 'string' ?
15
+ KNOWN_QUERY_PARAMS_KEYSTONE_GET.includes(key) :
16
+ false;
17
+ }
18
+ // #endregion KeystoneGetQueryParams
19
+ //# sourceMappingURL=keystone-handler-types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystone-handler-types.mjs","sourceRoot":"","sources":["../../../../../src/serve-gib/handlers/api/keystone/keystone-handler-types.mts"],"names":[],"mappings":"AAMA,iCAAiC;AACjC,MAAM,CAAC,MAAM,iCAAiC,GAAG;IAC7C;;OAEG;IACH,SAAS,EAAE,IAAI;IACf;;OAEG;IACH,QAAQ,EAAE,IAAI;CACjB,CAAC;AAMF,MAAM,CAAC,MAAM,+BAA+B,GAAG,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAsC,CAAC;AACnI,MAAM,UAAU,iCAAiC,CAAC,GAAQ;IACtD,OAAO,CAAC,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC;QACrC,+BAA+B,CAAC,QAAQ,CAAC,GAAU,CAAC,CAAC,CAAC;QACtD,KAAK,CAAC;AACd,CAAC;AACD,oCAAoC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @module serve-gib/handlers/api/keystone/keystone-lookup.handler
3
+ *
4
+ * POST /api/keystone/lookup
5
+ *
6
+ * Looks up a primary identity keystone by username or email hash in the server's identity index.
7
+ */
8
+ import { ServeGibHandlerBase } from '../../handler-base.mjs';
9
+ import { RequestContext, ResponseResult, ServeGibHttpMethod } from '../../../types.mjs';
10
+ /**
11
+ * POST /api/keystone/lookup
12
+ */
13
+ export declare class KeystoneLookupHandler extends ServeGibHandlerBase<undefined, undefined> {
14
+ protected lc: string;
15
+ protected method: ServeGibHttpMethod;
16
+ protected regex: RegExp;
17
+ protected handleRouteImpl(reqCtx: RequestContext<undefined, undefined>): Promise<ResponseResult | undefined>;
18
+ }
19
+ //# sourceMappingURL=keystone-lookup.handler.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystone-lookup.handler.d.mts","sourceRoot":"","sources":["../../../../../src/serve-gib/handlers/api/keystone/keystone-lookup.handler.mts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAIxF;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC;IAChF,UAAmB,EAAE,EAAE,MAAM,CAAqC;IAClE,UAAmB,MAAM,EAAE,kBAAkB,CAAU;IACvD,UAAmB,KAAK,SAAoC;IAE5D,UAAgB,eAAe,CAC3B,MAAM,EAAE,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,GAC7C,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAiErC;CACJ"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * @module serve-gib/handlers/api/keystone/keystone-lookup.handler
3
+ *
4
+ * POST /api/keystone/lookup
5
+ *
6
+ * Looks up a primary identity keystone by username or email hash in the server's identity index.
7
+ */
8
+ import * as path from 'node:path';
9
+ import { extractErrorMsg } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
10
+ import { getGibInfo } from '@ibgib/ts-gib/dist/V1/transforms/transform-helper.mjs';
11
+ import { IdentityIndexService } from '../../../identity-index/identity-index-service.mjs';
12
+ import { ServeGibHandlerBase } from '../../handler-base.mjs';
13
+ import { API_PATH_REGEXES } from '../../../path-constants.mjs';
14
+ import { bootstrapDomainMetaspace } from '../../../bootstrap-helper.mjs';
15
+ /**
16
+ * POST /api/keystone/lookup
17
+ */
18
+ export class KeystoneLookupHandler extends ServeGibHandlerBase {
19
+ lc = `[${KeystoneLookupHandler.name}]`;
20
+ method = 'POST';
21
+ regex = API_PATH_REGEXES.KEYSTONE_LOOKUP;
22
+ async handleRouteImpl(reqCtx) {
23
+ const lc = `${this.lc}[${this.handleRouteImpl.name}]`;
24
+ try {
25
+ // Anti-timing side-channel protection: add bounded random jitter delay (150ms-350ms)
26
+ const jitterMs = Math.floor(Math.random() * 200) + 150;
27
+ await new Promise(resolve => setTimeout(resolve, jitterMs));
28
+ let parsed;
29
+ try {
30
+ parsed = JSON.parse(reqCtx.body);
31
+ }
32
+ catch {
33
+ console.error(`${lc} Rejecting request: body must be valid JSON.`);
34
+ return this.error(400, 'Request body must be valid JSON');
35
+ }
36
+ const identifier = (parsed.identifier || '').trim();
37
+ if (!identifier) {
38
+ console.error(`${lc} Rejecting lookup: identifier missing or empty.`);
39
+ return this.error(400, 'Identifier is required');
40
+ }
41
+ const indexService = new IdentityIndexService({ baseDir: path.join(reqCtx.dataDir, 'index') });
42
+ const record = await indexService.getEmailIndex({ email: identifier });
43
+ if (!record) {
44
+ console.log(`${lc} Lookup missed for identifier '${identifier}'`);
45
+ return this.error(404, `No registered identity found for '${identifier}'. Please check your username/email or create a new account.`);
46
+ }
47
+ const { tjpAddr } = record;
48
+ const { tjpGib, punctiliarHash } = getGibInfo({ ibGibAddr: tjpAddr });
49
+ const domainGib = tjpGib || punctiliarHash;
50
+ if (!domainGib) {
51
+ console.error(`${lc} Could not extract domain identifier from tjpAddr: ${tjpAddr}`);
52
+ return this.error(500, `Internal server error locating primary identity.`);
53
+ }
54
+ // Load primary keystone from domain space
55
+ const metaspace = await bootstrapDomainMetaspace(tjpAddr, reqCtx.dataDir);
56
+ const space = await metaspace.getLocalUserSpace({ lock: false });
57
+ if (!space) {
58
+ console.error(`${lc} Could not load space for domain ${domainGib}`);
59
+ return this.error(500, `Internal server error loading domain space.`);
60
+ }
61
+ const latestAddr = await metaspace.getLatestAddr({ addr: tjpAddr, space }) ?? tjpAddr;
62
+ const resGet = await metaspace.get({ addr: latestAddr, space });
63
+ const primaryKeystone = resGet?.ibGibs?.[0];
64
+ if (!primaryKeystone) {
65
+ console.error(`${lc} Primary keystone ${latestAddr} indexed but not found in domain space.`);
66
+ return this.error(404, `Primary identity keystone not found in space.`);
67
+ }
68
+ console.log(`${lc} Found latest primary identity keystone for '${identifier}': ${latestAddr} (tjp: ${tjpAddr})`);
69
+ return this.ok({
70
+ success: true,
71
+ tjpAddr,
72
+ primaryKeystoneIbGib: primaryKeystone
73
+ });
74
+ }
75
+ catch (error) {
76
+ const emsg = extractErrorMsg(error);
77
+ console.error(`${lc} ${emsg}`);
78
+ return this.error(500, emsg);
79
+ }
80
+ }
81
+ }
82
+ //# sourceMappingURL=keystone-lookup.handler.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystone-lookup.handler.mjs","sourceRoot":"","sources":["../../../../../src/serve-gib/handlers/api/keystone/keystone-lookup.handler.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @module serve-gib/handlers/api/keystone
3
+ */
4
+ import { ServeGibHandlerWithMetaspaceBase } from '../../handler-base.mjs';
5
+ import { RequestContext, ResponseResult, ServeGibHttpMethod } from '../../../types.mjs';
6
+ import { KeystoneParams } from './keystone-handler-types.mjs';
7
+ /**
8
+ * POST /api/keystone
9
+ */
10
+ export declare class KeystonePostHandler extends ServeGibHandlerWithMetaspaceBase<KeystoneParams, any> {
11
+ protected lc: string;
12
+ protected method: ServeGibHttpMethod;
13
+ protected regex: RegExp;
14
+ protected parseParamsImpl(reqCtx: RequestContext<KeystoneParams, any>): Promise<KeystoneParams | undefined>;
15
+ protected validateQueryParams({ queryParams }: {
16
+ queryParams: any;
17
+ }): Promise<string[]>;
18
+ protected handleRouteImpl(reqCtx: RequestContext<KeystoneParams, any>): Promise<ResponseResult | undefined>;
19
+ }
20
+ //# sourceMappingURL=keystone-post.handler.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystone-post.handler.d.mts","sourceRoot":"","sources":["../../../../../src/serve-gib/handlers/api/keystone/keystone-post.handler.mts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,gCAAgC,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExF,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAK9D;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,gCAAgC,CAAC,cAAc,EAAE,GAAG,CAAC;IAC1F,UAAmB,EAAE,EAAE,MAAM,CAAmC;IAChE,UAAmB,MAAM,EAAE,kBAAkB,CAAU;IACvD,UAAmB,KAAK,SAA6B;IAErD,UAAyB,eAAe,CAAC,MAAM,EAAE,cAAc,CAAC,cAAc,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAazH;IAED,UAAyB,mBAAmB,CAAC,EAAE,WAAW,EAAE,EAAE;QAAE,WAAW,EAAE,GAAG,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAErG;IAED,UAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,CAAC,cAAc,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CA8BhH;CACJ"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * @module serve-gib/handlers/api/keystone
3
+ */
4
+ import { extractErrorMsg } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
5
+ import { validateAndRegisterPostKeystones } from '@ibgib/core-gib/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-receiver/sync-websocket-peer-helpers.mjs';
6
+ import { GLOBAL_LOG_A_LOT } from '../../../constants.mjs';
7
+ import { ServeGibHandlerWithMetaspaceBase } from '../../handler-base.mjs';
8
+ import { API_PATH_REGEXES } from '../../../path-constants.mjs';
9
+ import { getIbGibAddr } from '@ibgib/ts-gib/dist/helper.mjs';
10
+ const logalot = GLOBAL_LOG_A_LOT || true;
11
+ /**
12
+ * POST /api/keystone
13
+ */
14
+ export class KeystonePostHandler extends ServeGibHandlerWithMetaspaceBase {
15
+ lc = `[${KeystonePostHandler.name}]`;
16
+ method = 'POST';
17
+ regex = API_PATH_REGEXES.KEYSTONE;
18
+ async parseParamsImpl(reqCtx) {
19
+ let domainAddr = reqCtx.headers?.['ibgib-domain'];
20
+ if (!domainAddr) {
21
+ let bodyJson;
22
+ try {
23
+ bodyJson = JSON.parse(reqCtx.body);
24
+ }
25
+ catch { /* ignore */ }
26
+ if (bodyJson?.ibGibs?.[0]) {
27
+ domainAddr = getIbGibAddr({ ibGib: bodyJson.ibGibs[0] });
28
+ }
29
+ }
30
+ if (!domainAddr) {
31
+ return undefined;
32
+ }
33
+ return {
34
+ domainInfo: this.getDomainInfo({ domainAddr }),
35
+ };
36
+ }
37
+ async validateQueryParams({ queryParams }) {
38
+ return [];
39
+ }
40
+ async handleRouteImpl(reqCtx) {
41
+ const lc = `[${this.handleRouteImpl.name}]`;
42
+ try {
43
+ if (logalot) {
44
+ console.log(`${lc} starting... (I: 63bab8214834cb6e383e0fc364ee8826)`);
45
+ }
46
+ const { metaspace } = reqCtx;
47
+ if (!metaspace) {
48
+ throw new Error(`(UNEXPECTED) reqCtx.metaspace falsy? (E: 3d03027ea7f6f237980e511801255826)`);
49
+ }
50
+ const { ibGibs } = JSON.parse(reqCtx.body);
51
+ if (!Array.isArray(ibGibs))
52
+ return this.error(400, 'ibGibs array required');
53
+ const space = await metaspace.getLocalUserSpace({ lock: false });
54
+ if (!space) {
55
+ throw new Error(`No local user space found`);
56
+ }
57
+ // Delegate all intrinsic validation, keystone-specific checks, registration, and persistence to core-gib
58
+ await validateAndRegisterPostKeystones({
59
+ ibGibs,
60
+ metaspace,
61
+ space
62
+ });
63
+ return { status: 201, body: { success: true }, isJson: true };
64
+ }
65
+ catch (error) {
66
+ const emsg = `${lc} ${extractErrorMsg(error)}`;
67
+ console.error(emsg);
68
+ return this.error(500, emsg);
69
+ }
70
+ finally {
71
+ if (logalot) {
72
+ console.log(`${lc} complete.`);
73
+ }
74
+ }
75
+ }
76
+ }
77
+ //# sourceMappingURL=keystone-post.handler.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystone-post.handler.mjs","sourceRoot":"","sources":["../../../../../src/serve-gib/handlers/api/keystone/keystone-post.handler.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=keystone-post.respec.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystone-post.respec.d.mts","sourceRoot":"","sources":["../../../../../src/serve-gib/handlers/api/keystone/keystone-post.respec.mts"],"names":[],"mappings":""}
@@ -0,0 +1,131 @@
1
+ import { join } from 'node:path';
2
+ import { existsSync, rmSync, mkdirSync, readdirSync } from 'node:fs';
3
+ import { respecfully, iReckon, ifWe } from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
4
+ const sir = `[${import.meta.url}]`;
5
+ import { extractErrorMsg } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
6
+ import { getIbGibAddr } from '@ibgib/ts-gib/dist/helper.mjs';
7
+ import { KeystoneService_V1 } from '@ibgib/core-gib/dist/keystone/keystone-service-v1.mjs';
8
+ import { createStandardPoolConfig } from '@ibgib/core-gib/dist/keystone/keystone-config-builder.mjs';
9
+ import { POOL_ID_DEFAULT } from '@ibgib/core-gib/dist/keystone/keystone-constants.mjs';
10
+ import { GLOBAL_LOG_A_LOT } from '../../../constants.mjs';
11
+ import { ServeGib_V1 } from '../../../serve-gib-v1.mjs';
12
+ import { KeystonePostHandler } from './keystone-post.handler.mjs';
13
+ import { ErrorHandler } from '../../error-handler.mjs';
14
+ import { getDomainRootPath } from '../../../bootstrap-helper.mjs';
15
+ const logalot = GLOBAL_LOG_A_LOT;
16
+ if (logalot) {
17
+ console.log(`[test] keystone-post.respec.mts top-level entry`);
18
+ }
19
+ class MockMetaspace {
20
+ async getLocalUserSpace() { return new MockSpace(); }
21
+ async put() { }
22
+ async registerNewIbGib() { }
23
+ }
24
+ class MockSpace {
25
+ async witness() { return { data: { success: true } }; }
26
+ }
27
+ await respecfully(sir, 'Keystone POST Integration', async () => {
28
+ const testDataDir = './test-data-post';
29
+ const port = 3001;
30
+ // Clean test data
31
+ if (existsSync(testDataDir)) {
32
+ try {
33
+ rmSync(testDataDir, { recursive: true, force: true, maxRetries: 5, retryDelay: 100 });
34
+ }
35
+ catch { /* ignore */ }
36
+ }
37
+ mkdirSync(testDataDir, { recursive: true });
38
+ await ifWe(sir, 'bootstrap a new domain via POST /api/keystone', async () => {
39
+ const keystoneService = new KeystoneService_V1();
40
+ const config = createStandardPoolConfig({ id: POOL_ID_DEFAULT, salt: POOL_ID_DEFAULT });
41
+ // 1. Generate real genesis
42
+ const genesis = await keystoneService.genesis({
43
+ masterSecret: 'AliceSecret',
44
+ configs: [config],
45
+ metaspace: new MockMetaspace(),
46
+ space: new MockSpace(),
47
+ });
48
+ const addr = getIbGibAddr({ ibGib: genesis });
49
+ if (logalot) {
50
+ console.log(`[test] Generated genesis: ${addr}`);
51
+ }
52
+ // 2. Setup ServeGib_V1
53
+ const serveGib = new ServeGib_V1({
54
+ port,
55
+ dataDir: testDataDir,
56
+ handlers: [new KeystonePostHandler()],
57
+ errorHandler: new ErrorHandler()
58
+ });
59
+ if (logalot) {
60
+ console.log(`[test] ServeGib_V1 setup. Posting to /api/keystone...`);
61
+ }
62
+ // 3. Mock POST Request
63
+ const req = {
64
+ url: '/api/keystone',
65
+ method: 'POST',
66
+ headers: {
67
+ 'ibgib-domain': addr,
68
+ 'content-type': 'application/json'
69
+ },
70
+ on: (event, cb) => {
71
+ if (event === 'data') {
72
+ if (logalot) {
73
+ console.log(`[test] sending data chunk...`);
74
+ }
75
+ cb(Buffer.from(JSON.stringify({ ibGibs: [genesis] })));
76
+ }
77
+ if (event === 'end') {
78
+ if (logalot) {
79
+ console.log(`[test] end of request.`);
80
+ }
81
+ cb();
82
+ }
83
+ }
84
+ };
85
+ let capturedStatus = 0;
86
+ let capturedBody = null;
87
+ const res = {
88
+ writeHead: (status) => {
89
+ if (logalot) {
90
+ console.log(`[test] writeHead: ${status}`);
91
+ }
92
+ capturedStatus = status;
93
+ },
94
+ end: (body) => {
95
+ if (logalot) {
96
+ console.log(`[test] res.end called with body length: ${body?.length}`);
97
+ }
98
+ capturedBody = JSON.parse(body);
99
+ },
100
+ statusCode: 0
101
+ };
102
+ // 4. Handle
103
+ if (logalot) {
104
+ console.log(`[test] Calling handleRequest...`);
105
+ }
106
+ await serveGib.handleRequest(req, res);
107
+ if (logalot) {
108
+ console.log(`[test] handleRequest completed.`);
109
+ }
110
+ // 5. Verify
111
+ iReckon(sir, capturedStatus).asTo('captured status code').isGonnaBe(201);
112
+ iReckon(sir, capturedBody.success).asTo(`Handler failed: ${capturedBody.message || 'no message'}`).isGonnaBe(true);
113
+ const domainPath = getDomainRootPath(genesis.gib, testDataDir);
114
+ iReckon(sir, existsSync(domainPath)).asTo('domain path exists').isGonnaBe(true);
115
+ // Verify the ibgib actually exists in the new domain's storage
116
+ // With indexed storage, it's in a bucketed subpath: ibgib/default/ibgibs/B1/B2/
117
+ const bucket1 = genesis.gib.substring(0, 3).toUpperCase();
118
+ const bucket2 = genesis.gib.substring(3, 6).toUpperCase();
119
+ const bucketPath = join(domainPath, 'ibgib', 'default', 'ibgibs', bucket1, bucket2);
120
+ iReckon(sir, existsSync(bucketPath)).asTo(`Bucket path does not exist: ${bucketPath}`).isGonnaBe(true);
121
+ // We don't know the random filename, but we know it's a .json file in that bucket
122
+ try {
123
+ const files = readdirSync(bucketPath).filter(f => f.endsWith('.json'));
124
+ iReckon(sir, files.length > 0).asTo(`No .json files found in bucket: ${bucketPath}`).isGonnaBe(true);
125
+ }
126
+ catch (error) {
127
+ iReckon(sir, true).asTo(`error trying to readdir ${bucketPath}: ${extractErrorMsg(error)}`).isGonnaBe(true);
128
+ }
129
+ });
130
+ });
131
+ //# sourceMappingURL=keystone-post.respec.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystone-post.respec.mjs","sourceRoot":"","sources":["../../../../../src/serve-gib/handlers/api/keystone/keystone-post.respec.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { ServeGibHandlerBase } from '../../handler-base.mjs';
2
+ import { RequestContext, ResponseResult, ServeGibHttpMethod } from '../../../types.mjs';
3
+ /**
4
+ * GET /api/identity/sso/config
5
+ *
6
+ * Retrieves safe public client configurations (client ID, scope, auth URLs) for active OAuth2 providers.
7
+ */
8
+ export declare class SsoConfigHandler extends ServeGibHandlerBase<any, any> {
9
+ protected lc: string;
10
+ protected method: ServeGibHttpMethod;
11
+ protected regex: RegExp;
12
+ protected parseParamsImpl(reqCtx: RequestContext<any, any>): Promise<any>;
13
+ protected validateQueryParams({ queryParams }: {
14
+ queryParams: any;
15
+ }): Promise<string[]>;
16
+ /**
17
+ * @param reqCtx Context details of the incoming request.
18
+ * - Visibility: Public/Private (Contextual request information containing headers).
19
+ * - Generator: Server (Constructed dynamically by serve-gib-v1 pipeline).
20
+ */
21
+ protected handleRouteImpl(reqCtx: RequestContext<any>): Promise<ResponseResult | undefined>;
22
+ }
23
+ //# sourceMappingURL=sso-config.handler.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sso-config.handler.d.mts","sourceRoot":"","sources":["../../../../../src/serve-gib/handlers/api/keystone/sso-config.handler.mts"],"names":[],"mappings":"AAKA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAaxF;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC;IAC/D,UAAmB,EAAE,EAAE,MAAM,CAAgC;IAC7D,UAAmB,MAAM,EAAE,kBAAkB,CAAS;IACtD,UAAmB,KAAK,SAAwC;IAEhE,UAAyB,eAAe,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAEvF;IAED,UAAyB,mBAAmB,CAAC,EAAE,WAAW,EAAE,EAAE;QAAE,WAAW,EAAE,GAAG,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAErG;IAED;;;;OAIG;IACH,UAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAqBhG;CACJ"}
@@ -0,0 +1,62 @@
1
+ import { extractErrorMsg } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
2
+ import { loadSsoServerConfig } from '@ibgib/web-gib/dist/identity/sso/sso-config-helper.mjs';
3
+ import { SsoCustodianService } from '@ibgib/web-gib/dist/identity/sso/sso-custodian-service.mjs';
4
+ import { GLOBAL_LOG_A_LOT } from '../../../constants.mjs';
5
+ import { ServeGibHandlerBase } from '../../handler-base.mjs';
6
+ import { API_PATH_REGEXES } from '../../../path-constants.mjs';
7
+ const logalot = GLOBAL_LOG_A_LOT || true;
8
+ let custodian;
9
+ function getCustodian() {
10
+ if (!custodian) {
11
+ const config = loadSsoServerConfig();
12
+ custodian = new SsoCustodianService(config);
13
+ }
14
+ return custodian;
15
+ }
16
+ /**
17
+ * GET /api/identity/sso/config
18
+ *
19
+ * Retrieves safe public client configurations (client ID, scope, auth URLs) for active OAuth2 providers.
20
+ */
21
+ export class SsoConfigHandler extends ServeGibHandlerBase {
22
+ lc = `[${SsoConfigHandler.name}]`;
23
+ method = 'GET';
24
+ regex = API_PATH_REGEXES.IDENTITY_SSO_CONFIG;
25
+ async parseParamsImpl(reqCtx) {
26
+ return undefined;
27
+ }
28
+ async validateQueryParams({ queryParams }) {
29
+ return [];
30
+ }
31
+ /**
32
+ * @param reqCtx Context details of the incoming request.
33
+ * - Visibility: Public/Private (Contextual request information containing headers).
34
+ * - Generator: Server (Constructed dynamically by serve-gib-v1 pipeline).
35
+ */
36
+ async handleRouteImpl(reqCtx) {
37
+ const lc = `${this.lc}[${this.handleRouteImpl.name}]`;
38
+ try {
39
+ if (logalot) {
40
+ console.log(`${lc} starting...`);
41
+ }
42
+ const service = getCustodian();
43
+ const hostUrl = `${reqCtx.protocol}://${reqCtx.headers.host}`;
44
+ const providers = service.getSsoClientConfigs(hostUrl);
45
+ return this.ok({
46
+ success: true,
47
+ providers
48
+ }, 200);
49
+ }
50
+ catch (error) {
51
+ const emsg = extractErrorMsg(error);
52
+ console.error(`${lc} Fetching SSO config failed: ${emsg}`);
53
+ return this.error(500, `SSO configuration retrieval failed: ${emsg}`);
54
+ }
55
+ finally {
56
+ if (logalot) {
57
+ console.log(`${lc} complete.`);
58
+ }
59
+ }
60
+ }
61
+ }
62
+ //# sourceMappingURL=sso-config.handler.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sso-config.handler.mjs","sourceRoot":"","sources":["../../../../../src/serve-gib/handlers/api/keystone/sso-config.handler.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iDAAiD,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wDAAwD,CAAC;AAC7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,4DAA4D,CAAC;AAEjG,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAG/D,MAAM,OAAO,GAAG,gBAAgB,IAAI,IAAI,CAAC;AAEzC,IAAI,SAA0C,CAAC;AAC/C,SAAS,YAAY;IACjB,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;QACrC,SAAS,GAAG,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,gBAAiB,SAAQ,mBAA6B;IAC5C,EAAE,GAAW,IAAI,gBAAgB,CAAC,IAAI,GAAG,CAAC;IAC1C,MAAM,GAAuB,KAAK,CAAC;IACnC,KAAK,GAAG,gBAAgB,CAAC,mBAAmB,CAAC;IAE7C,KAAK,CAAC,eAAe,CAAC,MAAgC;QACrE,OAAO,SAAS,CAAC;IACrB,CAAC;IAEkB,KAAK,CAAC,mBAAmB,CAAC,EAAE,WAAW,EAAwB;QAC9E,OAAO,EAAE,CAAC;IACd,CAAC;IAED;;;;OAIG;IACO,KAAK,CAAC,eAAe,CAAC,MAA2B;QACvD,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC;QACtD,IAAI,CAAC;YACD,IAAI,OAAO,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;YAAC,CAAC;YAElD,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,GAAG,MAAM,CAAC,QAAQ,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC9D,MAAM,SAAS,GAAG,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAEvD,OAAO,IAAI,CAAC,EAAE,CAAC;gBACX,OAAO,EAAE,IAAI;gBACb,SAAS;aACZ,EAAE,GAAG,CAAC,CAAC;QAEZ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;YACpC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,gCAAgC,IAAI,EAAE,CAAC,CAAC;YAC3D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,uCAAuC,IAAI,EAAE,CAAC,CAAC;QAC1E,CAAC;gBAAS,CAAC;YACP,IAAI,OAAO,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAAC,CAAC;QACpD,CAAC;IACL,CAAC;CACJ"}