@ibgib/core-gib 0.0.4

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 (330) hide show
  1. package/.vscode/core-gib-snippets.code-snippets +189 -0
  2. package/.vscode/launch.json +24 -0
  3. package/.vscode/settings.json +56 -0
  4. package/.vscode/tasks.json +37 -0
  5. package/CHANGELOG.md +11 -0
  6. package/README.md +215 -0
  7. package/dist/common/aws-constants.d.mts +7 -0
  8. package/dist/common/aws-constants.d.mts.map +1 -0
  9. package/dist/common/aws-constants.mjs +7 -0
  10. package/dist/common/aws-constants.mjs.map +1 -0
  11. package/dist/common/bin/bin-types.d.mts +17 -0
  12. package/dist/common/bin/bin-types.d.mts.map +1 -0
  13. package/dist/common/bin/bin-types.mjs +3 -0
  14. package/dist/common/bin/bin-types.mjs.map +1 -0
  15. package/dist/common/cache/cache-types.d.mts +57 -0
  16. package/dist/common/cache/cache-types.d.mts.map +1 -0
  17. package/dist/common/cache/cache-types.mjs +2 -0
  18. package/dist/common/cache/cache-types.mjs.map +1 -0
  19. package/dist/common/comment/comment-constants.d.mts +11 -0
  20. package/dist/common/comment/comment-constants.d.mts.map +1 -0
  21. package/dist/common/comment/comment-constants.mjs +11 -0
  22. package/dist/common/comment/comment-constants.mjs.map +1 -0
  23. package/dist/common/comment/comment-helper.d.mts +59 -0
  24. package/dist/common/comment/comment-helper.d.mts.map +1 -0
  25. package/dist/common/comment/comment-helper.mjs +173 -0
  26. package/dist/common/comment/comment-helper.mjs.map +1 -0
  27. package/dist/common/comment/comment-types.d.mts +16 -0
  28. package/dist/common/comment/comment-types.d.mts.map +1 -0
  29. package/dist/common/comment/comment-types.mjs +2 -0
  30. package/dist/common/comment/comment-types.mjs.map +1 -0
  31. package/dist/common/display/display-helper.d.mts +19 -0
  32. package/dist/common/display/display-helper.d.mts.map +1 -0
  33. package/dist/common/display/display-helper.mjs +68 -0
  34. package/dist/common/display/display-helper.mjs.map +1 -0
  35. package/dist/common/display/display-types.d.mts +97 -0
  36. package/dist/common/display/display-types.d.mts.map +1 -0
  37. package/dist/common/display/display-types.mjs +37 -0
  38. package/dist/common/display/display-types.mjs.map +1 -0
  39. package/dist/common/encrypt/encrypt-constants.d.mts +27 -0
  40. package/dist/common/encrypt/encrypt-constants.d.mts.map +1 -0
  41. package/dist/common/encrypt/encrypt-constants.mjs +27 -0
  42. package/dist/common/encrypt/encrypt-constants.mjs.map +1 -0
  43. package/dist/common/encrypt/encrypt-types.d.mts +116 -0
  44. package/dist/common/encrypt/encrypt-types.d.mts.map +1 -0
  45. package/dist/common/encrypt/encrypt-types.mjs +9 -0
  46. package/dist/common/encrypt/encrypt-types.mjs.map +1 -0
  47. package/dist/common/error/error-constants.d.mts +9 -0
  48. package/dist/common/error/error-constants.d.mts.map +1 -0
  49. package/dist/common/error/error-constants.mjs +9 -0
  50. package/dist/common/error/error-constants.mjs.map +1 -0
  51. package/dist/common/error/error-helper.d.mts +43 -0
  52. package/dist/common/error/error-helper.d.mts.map +1 -0
  53. package/dist/common/error/error-helper.mjs +167 -0
  54. package/dist/common/error/error-helper.mjs.map +1 -0
  55. package/dist/common/error/error-types.d.mts +58 -0
  56. package/dist/common/error/error-types.d.mts.map +1 -0
  57. package/dist/common/error/error-types.mjs +2 -0
  58. package/dist/common/error/error-types.mjs.map +1 -0
  59. package/dist/common/form/form-helper.d.mts +97 -0
  60. package/dist/common/form/form-helper.d.mts.map +1 -0
  61. package/dist/common/form/form-helper.mjs +185 -0
  62. package/dist/common/form/form-helper.mjs.map +1 -0
  63. package/dist/common/form/form-items.d.mts +229 -0
  64. package/dist/common/form/form-items.d.mts.map +1 -0
  65. package/dist/common/form/form-items.mjs +63 -0
  66. package/dist/common/form/form-items.mjs.map +1 -0
  67. package/dist/common/import-export/import-export-types.d.mts +18 -0
  68. package/dist/common/import-export/import-export-types.d.mts.map +1 -0
  69. package/dist/common/import-export/import-export-types.mjs +2 -0
  70. package/dist/common/import-export/import-export-types.mjs.map +1 -0
  71. package/dist/common/legacy/legacy-types.d.mts +2 -0
  72. package/dist/common/legacy/legacy-types.d.mts.map +1 -0
  73. package/dist/common/legacy/legacy-types.mjs +2 -0
  74. package/dist/common/legacy/legacy-types.mjs.map +1 -0
  75. package/dist/common/link/link-constants.d.mts +2 -0
  76. package/dist/common/link/link-constants.d.mts.map +1 -0
  77. package/dist/common/link/link-constants.mjs +2 -0
  78. package/dist/common/link/link-constants.mjs.map +1 -0
  79. package/dist/common/link/link-helper.d.mts +37 -0
  80. package/dist/common/link/link-helper.d.mts.map +1 -0
  81. package/dist/common/link/link-helper.mjs +143 -0
  82. package/dist/common/link/link-helper.mjs.map +1 -0
  83. package/dist/common/link/link-types.d.mts +14 -0
  84. package/dist/common/link/link-types.d.mts.map +1 -0
  85. package/dist/common/link/link-types.mjs +2 -0
  86. package/dist/common/link/link-types.mjs.map +1 -0
  87. package/dist/common/other/graph-helper.d.mts +166 -0
  88. package/dist/common/other/graph-helper.d.mts.map +1 -0
  89. package/dist/common/other/graph-helper.mjs +710 -0
  90. package/dist/common/other/graph-helper.mjs.map +1 -0
  91. package/dist/common/other/ibgib-helper.d.mts +245 -0
  92. package/dist/common/other/ibgib-helper.d.mts.map +1 -0
  93. package/dist/common/other/ibgib-helper.mjs +641 -0
  94. package/dist/common/other/ibgib-helper.mjs.map +1 -0
  95. package/dist/common/other/other-constants.d.mts +53 -0
  96. package/dist/common/other/other-constants.d.mts.map +1 -0
  97. package/dist/common/other/other-constants.mjs +67 -0
  98. package/dist/common/other/other-constants.mjs.map +1 -0
  99. package/dist/common/other/other-types.d.mts +166 -0
  100. package/dist/common/other/other-types.d.mts.map +1 -0
  101. package/dist/common/other/other-types.mjs +30 -0
  102. package/dist/common/other/other-types.mjs.map +1 -0
  103. package/dist/common/other/svg-constants.d.mts +2 -0
  104. package/dist/common/other/svg-constants.d.mts.map +1 -0
  105. package/dist/common/other/svg-constants.mjs +2 -0
  106. package/dist/common/other/svg-constants.mjs.map +1 -0
  107. package/dist/common/other/svg-helper.d.mts +54 -0
  108. package/dist/common/other/svg-helper.d.mts.map +1 -0
  109. package/dist/common/other/svg-helper.mjs +170 -0
  110. package/dist/common/other/svg-helper.mjs.map +1 -0
  111. package/dist/common/pic/pic-constants.d.mts +13 -0
  112. package/dist/common/pic/pic-constants.d.mts.map +1 -0
  113. package/dist/common/pic/pic-constants.mjs +13 -0
  114. package/dist/common/pic/pic-constants.mjs.map +1 -0
  115. package/dist/common/pic/pic-helper.d.mts +70 -0
  116. package/dist/common/pic/pic-helper.d.mts.map +1 -0
  117. package/dist/common/pic/pic-helper.mjs +235 -0
  118. package/dist/common/pic/pic-helper.mjs.map +1 -0
  119. package/dist/common/pic/pic-types.d.mts +23 -0
  120. package/dist/common/pic/pic-types.d.mts.map +1 -0
  121. package/dist/common/pic/pic-types.mjs +2 -0
  122. package/dist/common/pic/pic-types.mjs.map +1 -0
  123. package/dist/common/root/root-constants.d.mts +40 -0
  124. package/dist/common/root/root-constants.d.mts.map +1 -0
  125. package/dist/common/root/root-constants.mjs +40 -0
  126. package/dist/common/root/root-constants.mjs.map +1 -0
  127. package/dist/common/root/root-types.d.mts +9 -0
  128. package/dist/common/root/root-types.d.mts.map +1 -0
  129. package/dist/common/root/root-types.mjs +2 -0
  130. package/dist/common/root/root-types.mjs.map +1 -0
  131. package/dist/common/tag/tag-constants.d.mts +21 -0
  132. package/dist/common/tag/tag-constants.d.mts.map +1 -0
  133. package/dist/common/tag/tag-constants.mjs +28 -0
  134. package/dist/common/tag/tag-constants.mjs.map +1 -0
  135. package/dist/common/tag/tag-types.d.mts +14 -0
  136. package/dist/common/tag/tag-types.d.mts.map +1 -0
  137. package/dist/common/tag/tag-types.mjs +2 -0
  138. package/dist/common/tag/tag-types.mjs.map +1 -0
  139. package/dist/core-constants.d.mts +89 -0
  140. package/dist/core-constants.d.mts.map +1 -0
  141. package/dist/core-constants.mjs +484 -0
  142. package/dist/core-constants.mjs.map +1 -0
  143. package/dist/core-helper.d.mts +6 -0
  144. package/dist/core-helper.d.mts.map +1 -0
  145. package/dist/core-helper.mjs +28 -0
  146. package/dist/core-helper.mjs.map +1 -0
  147. package/dist/core-types.d.mts +520 -0
  148. package/dist/core-types.d.mts.map +1 -0
  149. package/dist/core-types.mjs +2 -0
  150. package/dist/core-types.mjs.map +1 -0
  151. package/dist/index.d.mts +2 -0
  152. package/dist/index.d.mts.map +1 -0
  153. package/dist/index.mjs +3 -0
  154. package/dist/index.mjs.map +1 -0
  155. package/dist/witness/app/app-base-v1.d.mts +130 -0
  156. package/dist/witness/app/app-base-v1.d.mts.map +1 -0
  157. package/dist/witness/app/app-base-v1.mjs +462 -0
  158. package/dist/witness/app/app-base-v1.mjs.map +1 -0
  159. package/dist/witness/app/app-constants.d.mts +10 -0
  160. package/dist/witness/app/app-constants.d.mts.map +1 -0
  161. package/dist/witness/app/app-constants.mjs +13 -0
  162. package/dist/witness/app/app-constants.mjs.map +1 -0
  163. package/dist/witness/app/app-helper.d.mts +85 -0
  164. package/dist/witness/app/app-helper.d.mts.map +1 -0
  165. package/dist/witness/app/app-helper.mjs +258 -0
  166. package/dist/witness/app/app-helper.mjs.map +1 -0
  167. package/dist/witness/app/app-types.d.mts +211 -0
  168. package/dist/witness/app/app-types.d.mts.map +1 -0
  169. package/dist/witness/app/app-types.mjs +49 -0
  170. package/dist/witness/app/app-types.mjs.map +1 -0
  171. package/dist/witness/app/chat-app/chat-app-types.d.mts +18 -0
  172. package/dist/witness/app/chat-app/chat-app-types.d.mts.map +1 -0
  173. package/dist/witness/app/chat-app/chat-app-types.mjs +25 -0
  174. package/dist/witness/app/chat-app/chat-app-types.mjs.map +1 -0
  175. package/dist/witness/app/flash-app/flash-app-types.d.mts +16 -0
  176. package/dist/witness/app/flash-app/flash-app-types.d.mts.map +1 -0
  177. package/dist/witness/app/flash-app/flash-app-types.mjs +23 -0
  178. package/dist/witness/app/flash-app/flash-app-types.mjs.map +1 -0
  179. package/dist/witness/app/raw-app/raw-app-types.d.mts +18 -0
  180. package/dist/witness/app/raw-app/raw-app-types.d.mts.map +1 -0
  181. package/dist/witness/app/raw-app/raw-app-types.mjs +25 -0
  182. package/dist/witness/app/raw-app/raw-app-types.mjs.map +1 -0
  183. package/dist/witness/app/todo-app/todo-app-types.d.ts +33 -0
  184. package/dist/witness/app/todo-app/todo-app-types.d.ts.map +1 -0
  185. package/dist/witness/app/todo-app/todo-app-types.js +31 -0
  186. package/dist/witness/app/todo-app/todo-app-types.js.map +1 -0
  187. package/dist/witness/robbot/robbot-base-v1.d.ts +432 -0
  188. package/dist/witness/robbot/robbot-base-v1.d.ts.map +1 -0
  189. package/dist/witness/robbot/robbot-base-v1.js +1407 -0
  190. package/dist/witness/robbot/robbot-base-v1.js.map +1 -0
  191. package/dist/witness/robbot/robbot-constants.d.mts +24 -0
  192. package/dist/witness/robbot/robbot-constants.d.mts.map +1 -0
  193. package/dist/witness/robbot/robbot-constants.mjs +24 -0
  194. package/dist/witness/robbot/robbot-constants.mjs.map +1 -0
  195. package/dist/witness/robbot/robbot-helper.d.mts +152 -0
  196. package/dist/witness/robbot/robbot-helper.d.mts.map +1 -0
  197. package/dist/witness/robbot/robbot-helper.mjs +609 -0
  198. package/dist/witness/robbot/robbot-helper.mjs.map +1 -0
  199. package/dist/witness/robbot/robbot-types.d.mts +539 -0
  200. package/dist/witness/robbot/robbot-types.d.mts.map +1 -0
  201. package/dist/witness/robbot/robbot-types.mjs +294 -0
  202. package/dist/witness/robbot/robbot-types.mjs.map +1 -0
  203. package/dist/witness/space/bootstrap/bootstrap-constants.d.mts +14 -0
  204. package/dist/witness/space/bootstrap/bootstrap-constants.d.mts.map +1 -0
  205. package/dist/witness/space/bootstrap/bootstrap-constants.mjs +15 -0
  206. package/dist/witness/space/bootstrap/bootstrap-constants.mjs.map +1 -0
  207. package/dist/witness/space/inner-space-v1.d.ts +63 -0
  208. package/dist/witness/space/inner-space-v1.d.ts.map +1 -0
  209. package/dist/witness/space/inner-space-v1.js +356 -0
  210. package/dist/witness/space/inner-space-v1.js.map +1 -0
  211. package/dist/witness/space/outer-space/outer-space-constants.d.mts +2 -0
  212. package/dist/witness/space/outer-space/outer-space-constants.d.mts.map +1 -0
  213. package/dist/witness/space/outer-space/outer-space-constants.mjs +2 -0
  214. package/dist/witness/space/outer-space/outer-space-constants.mjs.map +1 -0
  215. package/dist/witness/space/outer-space/outer-space-helper.d.mts +28 -0
  216. package/dist/witness/space/outer-space/outer-space-helper.d.mts.map +1 -0
  217. package/dist/witness/space/outer-space/outer-space-helper.mjs +87 -0
  218. package/dist/witness/space/outer-space/outer-space-helper.mjs.map +1 -0
  219. package/dist/witness/space/outer-space/outer-space-types.d.mts +548 -0
  220. package/dist/witness/space/outer-space/outer-space-types.d.mts.map +1 -0
  221. package/dist/witness/space/outer-space/outer-space-types.mjs +118 -0
  222. package/dist/witness/space/outer-space/outer-space-types.mjs.map +1 -0
  223. package/dist/witness/space/space-base-v1.d.mts +147 -0
  224. package/dist/witness/space/space-base-v1.d.mts.map +1 -0
  225. package/dist/witness/space/space-base-v1.mjs +350 -0
  226. package/dist/witness/space/space-base-v1.mjs.map +1 -0
  227. package/dist/witness/space/space-constants.d.mts +181 -0
  228. package/dist/witness/space/space-constants.d.mts.map +1 -0
  229. package/dist/witness/space/space-constants.mjs +192 -0
  230. package/dist/witness/space/space-constants.mjs.map +1 -0
  231. package/dist/witness/space/space-helper.d.mts +666 -0
  232. package/dist/witness/space/space-helper.d.mts.map +1 -0
  233. package/dist/witness/space/space-helper.mjs +2830 -0
  234. package/dist/witness/space/space-helper.mjs.map +1 -0
  235. package/dist/witness/space/space-types.d.mts +422 -0
  236. package/dist/witness/space/space-types.d.mts.map +1 -0
  237. package/dist/witness/space/space-types.mjs +52 -0
  238. package/dist/witness/space/space-types.mjs.map +1 -0
  239. package/dist/witness/witness-base-v1.d.ts +144 -0
  240. package/dist/witness/witness-base-v1.d.ts.map +1 -0
  241. package/dist/witness/witness-base-v1.js +300 -0
  242. package/dist/witness/witness-base-v1.js.map +1 -0
  243. package/dist/witness/witness-constants.d.mts +3 -0
  244. package/dist/witness/witness-constants.d.mts.map +1 -0
  245. package/dist/witness/witness-constants.mjs +3 -0
  246. package/dist/witness/witness-constants.mjs.map +1 -0
  247. package/dist/witness/witness-form-builder.d.mts +45 -0
  248. package/dist/witness/witness-form-builder.d.mts.map +1 -0
  249. package/dist/witness/witness-form-builder.mjs +95 -0
  250. package/dist/witness/witness-form-builder.mjs.map +1 -0
  251. package/dist/witness/witness-helper.d.mts +89 -0
  252. package/dist/witness/witness-helper.d.mts.map +1 -0
  253. package/dist/witness/witness-helper.mjs +229 -0
  254. package/dist/witness/witness-helper.mjs.map +1 -0
  255. package/dist/witness/witness-types.d.mts +211 -0
  256. package/dist/witness/witness-types.d.mts.map +1 -0
  257. package/dist/witness/witness-types.mjs +2 -0
  258. package/dist/witness/witness-types.mjs.map +1 -0
  259. package/jasmine-browser.json +18 -0
  260. package/jasmine.json +6 -0
  261. package/package.json +67 -0
  262. package/src/assumptions.spec.mts +45 -0
  263. package/src/common/aws-constants.mts +5 -0
  264. package/src/common/bin/bin-types.mts +17 -0
  265. package/src/common/cache/cache-types.mts +53 -0
  266. package/src/common/comment/comment-constants.mts +10 -0
  267. package/src/common/comment/comment-helper.mts +211 -0
  268. package/src/common/comment/comment-types.mts +19 -0
  269. package/src/common/display/display-helper.mts +88 -0
  270. package/src/common/display/display-types.mts +108 -0
  271. package/src/common/encrypt/encrypt-constants.mts +28 -0
  272. package/src/common/encrypt/encrypt-types.mts +130 -0
  273. package/src/common/error/error-constants.mts +8 -0
  274. package/src/common/error/error-helper.mts +155 -0
  275. package/src/common/error/error-types.mts +62 -0
  276. package/src/common/form/form-helper.mts +253 -0
  277. package/src/common/form/form-items.mts +236 -0
  278. package/src/common/import-export/import-export-types.mts +18 -0
  279. package/src/common/legacy/about-legacy.md +0 -0
  280. package/src/common/legacy/legacy-types.mts +0 -0
  281. package/src/common/link/link-constants.mts +1 -0
  282. package/src/common/link/link-helper.mts +155 -0
  283. package/src/common/link/link-types.mts +16 -0
  284. package/src/common/other/graph-helper.mts +853 -0
  285. package/src/common/other/ibgib-helper.mts +671 -0
  286. package/src/common/other/other-constants.mts +76 -0
  287. package/src/common/other/other-types.mts +186 -0
  288. package/src/common/other/svg-constants.mts +1 -0
  289. package/src/common/other/svg-helper.mts +238 -0
  290. package/src/common/pic/pic-constants.mts +13 -0
  291. package/src/common/pic/pic-helper.mts +295 -0
  292. package/src/common/pic/pic-types.mts +29 -0
  293. package/src/common/root/root-constants.mts +41 -0
  294. package/src/common/root/root-types.mts +8 -0
  295. package/src/common/tag/tag-constants.mts +34 -0
  296. package/src/common/tag/tag-types.mts +19 -0
  297. package/src/core-constants.mts +506 -0
  298. package/src/core-helper.mts +33 -0
  299. package/src/core-types.mts +519 -0
  300. package/src/helper.spec.mts +64 -0
  301. package/src/index.mts +1 -0
  302. package/src/witness/app/app-base-v1.mts +584 -0
  303. package/src/witness/app/app-constants.mts +16 -0
  304. package/src/witness/app/app-helper.mts +322 -0
  305. package/src/witness/app/app-types.mts +252 -0
  306. package/src/witness/app/chat-app/chat-app-types.mts +40 -0
  307. package/src/witness/app/flash-app/flash-app-types.mts +38 -0
  308. package/src/witness/app/raw-app/raw-app-types.mts +40 -0
  309. package/src/witness/app/todo-app/todo-app-types.ts +59 -0
  310. package/src/witness/robbot/robbot-base-v1.ts +1531 -0
  311. package/src/witness/robbot/robbot-constants.mts +25 -0
  312. package/src/witness/robbot/robbot-helper.mts +676 -0
  313. package/src/witness/robbot/robbot-helper.spec.mts +135 -0
  314. package/src/witness/robbot/robbot-types.mts +797 -0
  315. package/src/witness/space/bootstrap/bootstrap-constants.mts +15 -0
  316. package/src/witness/space/inner-space-v1.ts +372 -0
  317. package/src/witness/space/outer-space/outer-space-constants.mts +1 -0
  318. package/src/witness/space/outer-space/outer-space-helper.mts +91 -0
  319. package/src/witness/space/outer-space/outer-space-types.mts +627 -0
  320. package/src/witness/space/space-base-v1.mts +414 -0
  321. package/src/witness/space/space-constants.mts +208 -0
  322. package/src/witness/space/space-helper.mts +3242 -0
  323. package/src/witness/space/space-types.mts +476 -0
  324. package/src/witness/witness-base-v1.ts +325 -0
  325. package/src/witness/witness-constants.mts +2 -0
  326. package/src/witness/witness-form-builder.mts +128 -0
  327. package/src/witness/witness-helper.mts +256 -0
  328. package/src/witness/witness-types.mts +249 -0
  329. package/tsconfig.json +15 -0
  330. package/tsconfig.test.json +10 -0
@@ -0,0 +1,25 @@
1
+ /**
2
+ * In a Robbot's rel8ns, this is the rel8n name that links to tags that the
3
+ * Robbot uses for tagging its output.
4
+ */
5
+ export const ROBBOT_TAG_TJP_ADDRS_REL8N_NAME = 'tagTjpAddrs';
6
+ /**
7
+ * A spaces ibGib uses this rel8n name for related sync spaces, used
8
+ * in replicating ibgib spaces.
9
+ */
10
+ export const ROBBOT_REL8N_NAME = 'robbot';
11
+ /**
12
+ * When a robbot witnesses an ibgib, it will "remember" the ibgib
13
+ * by relating the target ibgib to itself via this rel8nName.
14
+ */
15
+ export const DEFAULT_ROBBOT_TARGET_REL8N_NAME = 'x';
16
+
17
+ /**
18
+ * wah wah wah...
19
+ */
20
+ export const IBGIB_ROBBOT_NAME_DEFAULT = 'i';
21
+
22
+ /**
23
+ * Icon for a single robbot
24
+ */
25
+ export const DEFAULT_ROBBOT_ICON = 'body-outline';
@@ -0,0 +1,676 @@
1
+ import { UUID_REGEXP, delay, getSaferSubstring, getTimestampInTicks, getUUID, pretty } from '@ibgib/helper-gib';
2
+ import { Gib, Ib, } from '@ibgib/ts-gib';
3
+ import { validateGib, validateIb, validateIbGibIntrinsically } from '@ibgib/ts-gib/dist/V1/validate-helper.mjs';
4
+ import { GIB, IbGib_V1, getGib, getGibInfo, } from '@ibgib/ts-gib/dist/V1/index.mjs';
5
+
6
+
7
+ import { IbGibTimelineUpdateInfo } from '../../common/other/other-types.mjs';
8
+ import { WitnessFormBuilder } from '../witness-form-builder.mjs';
9
+ import { IbGibRobbotAny } from './robbot-base-v1';
10
+ import {
11
+ DEFAULT_INTERACTION_SUBJECTTJPGIBS_DELIM,
12
+ UNDEFINED_INTERACTION_SUBJECTTJPGIBS_STRING,
13
+ DEFAULT_ROBBOT_REQUEST_ESCAPE_STRING,
14
+ RobbotData_V1, RobbotIbGib_V1, RobbotInteractionData_V1, RobbotInteractionIbGib_V1,
15
+ RobbotInteractionIbInfo, RobbotInteractionRel8ns_V1, RobbotInteractionType,
16
+ ROBBOT_INTERACTION_ATOM, ROBBOT_SESSION_ATOM, DEFAULT_ROBBOT_REQUEST_MAX_LENGTH,
17
+ } from './robbot-types.mjs';
18
+ import { IbGibSpaceAny } from '../space/space-base-v1.mjs';
19
+ import { persistTransformResult, registerNewIbGib, rel8ToSpecialIbGib } from '../space/space-helper.mjs';
20
+ import { isComment, parseCommentIb } from '../../common/comment/comment-helper.mjs';
21
+ import { ROBBOT_REL8N_NAME } from './robbot-constants.mjs';
22
+ import { IbGibLocalSpaceService_AllPowerful } from '../../core-types.mjs';
23
+ import { GLOBAL_LOG_A_LOT, ROBBOT_NAME_REGEXP, ROBBOT_PREFIX_SUFFIX_REGEXP, ROBBOT_PREFIX_SUFFIX_REGEXP_DESC } from '../../core-constants.mjs';
24
+
25
+
26
+ const logalot = GLOBAL_LOG_A_LOT || false;
27
+
28
+
29
+ export function getRobbotResultMetadata({ robbot }: { robbot: IbGibRobbotAny }): string {
30
+ return `${robbot.ib} ${getTimestampInTicks()}`;
31
+ }
32
+
33
+
34
+ export function validateCommonRobbotData({
35
+ robbotData,
36
+ }: {
37
+ robbotData?: RobbotData_V1,
38
+ }): string[] {
39
+ const lc = `[${validateCommonRobbotData.name}]`;
40
+ try {
41
+ if (logalot) { console.log(`${lc} starting...`); }
42
+ if (!robbotData) { throw new Error(`robbotData required (E: 1ac78ffae5354b67acb64a34cfe23c2f)`); }
43
+ const errors: string[] = [];
44
+ const {
45
+ name, uuid, classname,
46
+ outputPrefix, outputSuffix,
47
+ } =
48
+ robbotData;
49
+
50
+ if (name) {
51
+ if (!name.match(ROBBOT_NAME_REGEXP)) {
52
+ errors.push(`name must match regexp: ${ROBBOT_NAME_REGEXP}`);
53
+ }
54
+ } else {
55
+ errors.push(`name required.`);
56
+ }
57
+
58
+ if (uuid) {
59
+ if (!uuid.match(UUID_REGEXP)) {
60
+ errors.push(`uuid must match regexp: ${UUID_REGEXP}`);
61
+ }
62
+ } else {
63
+ errors.push(`uuid required.`);
64
+ }
65
+
66
+ if (outputPrefix) {
67
+ if (!outputPrefix.match(ROBBOT_PREFIX_SUFFIX_REGEXP)) {
68
+ errors.push(`outputPrefix must match regexp: ${ROBBOT_PREFIX_SUFFIX_REGEXP}`);
69
+ }
70
+ }
71
+
72
+ if (outputSuffix) {
73
+ if (!outputSuffix.match(ROBBOT_PREFIX_SUFFIX_REGEXP)) {
74
+ errors.push(`outputSuffix must match regexp: ${ROBBOT_PREFIX_SUFFIX_REGEXP}`);
75
+ }
76
+ }
77
+
78
+ if (classname) {
79
+ if (!classname.match(ROBBOT_NAME_REGEXP)) {
80
+ errors.push(`classname must match regexp: ${ROBBOT_NAME_REGEXP}`);
81
+ }
82
+ }
83
+
84
+ return errors;
85
+ } catch (error) {
86
+ console.error(`${lc} ${error.message}`);
87
+ throw error;
88
+ } finally {
89
+ if (logalot) { console.log(`${lc} complete.`); }
90
+ }
91
+ }
92
+
93
+ export async function validateCommonRobbotIbGib({
94
+ robbotIbGib,
95
+ }: {
96
+ robbotIbGib: RobbotIbGib_V1,
97
+ }): Promise<string[] | undefined> {
98
+ const lc = `[${validateCommonRobbotIbGib.name}]`;
99
+ try {
100
+ const intrinsicErrors: string[] = await validateIbGibIntrinsically({ ibGib: robbotIbGib }) ?? [];
101
+
102
+ if (!robbotIbGib.data) { throw new Error(`robbotIbGib.data required (E: 754a8d2540610696aff04b0d159daa23)`); }
103
+ const ibErrors: string[] = [];
104
+ if (logalot) { console.log(`${lc} starting... (I: f7b34d791a483b8c5a9d188da66d3f22)`); }
105
+ let { robbotClassname, robbotName, robbotId } = parseRobbotIb({ robbotIb: robbotIbGib.ib });
106
+ if (!robbotClassname) { ibErrors.push(`robbotClassname required (E: 3234d39bf1c74ec3aff59f374282dfc8)`); }
107
+ if (!robbotName) { ibErrors.push(`robbotName required (E: b329dcc62ff548d7aa0681393b2c7057)`); }
108
+ if (!robbotId) { ibErrors.push(`robbotId required (E: b562c953bfaf4dd49e4d3a08304ee2fc)`); }
109
+
110
+ const dataErrors = validateCommonRobbotData({ robbotData: robbotIbGib.data });
111
+
112
+ let result = [...(intrinsicErrors ?? []), ...(ibErrors ?? []), ...(dataErrors ?? [])];
113
+ if (result.length > 0) {
114
+ return result;
115
+ } else {
116
+ return undefined;
117
+ }
118
+ } catch (error) {
119
+ console.error(`${lc} ${error.message}`);
120
+ throw error;
121
+ } finally {
122
+ if (logalot) { console.log(`${lc} complete.`); }
123
+ }
124
+ }
125
+
126
+ export function getRobbotIb({
127
+ robbotData,
128
+ classname,
129
+ }: {
130
+ robbotData: RobbotData_V1,
131
+ classname?: string,
132
+ }): Ib {
133
+ const lc = `[${getRobbotIb.name}]`;
134
+ try {
135
+ const validationErrors = validateCommonRobbotData({ robbotData });
136
+ if (validationErrors.length > 0) { throw new Error(`invalid robbotData: ${validationErrors} (E: 390316b7c4fb0bd104ddc4e6c2e12922)`); }
137
+ if (classname) {
138
+ if (robbotData.classname && robbotData.classname !== classname) { throw new Error(`classname does not match robbotData.classname (E: e21dbc830856fbcee1d3ab260b0c5922)`); }
139
+ } else {
140
+ classname = robbotData.classname;
141
+ if (!classname) { throw new Error(`classname required (E: e0519f89df8a468c8743cb932f436bfe)`); }
142
+ }
143
+
144
+ // ad hoc validation here. should centralize witness classname validation
145
+
146
+ const { name, uuid } = robbotData;
147
+ return `witness robbot ${classname} ${name} ${uuid}`;
148
+ } catch (error) {
149
+ console.error(`${lc} ${error.message}`);
150
+ throw error;
151
+ }
152
+ }
153
+
154
+ /**
155
+ * Current schema is `witness robbot [classname] [robbotName] [robbotId]
156
+ *
157
+ * NOTE this is space-delimited
158
+ */
159
+ export function parseRobbotIb({
160
+ robbotIb,
161
+ }: {
162
+ robbotIb: Ib,
163
+ }): {
164
+ robbotClassname: string,
165
+ robbotName: string,
166
+ robbotId: string,
167
+ } {
168
+ const lc = `[${parseRobbotIb.name}]`;
169
+ try {
170
+ if (!robbotIb) { throw new Error(`robbotIb required (E: 4a35881058094f1a90bb4ea37052d6d7)`); }
171
+
172
+ const pieces = robbotIb.split(' ');
173
+
174
+ return {
175
+ robbotClassname: pieces[2],
176
+ robbotName: pieces[3],
177
+ robbotId: pieces[4],
178
+ };
179
+ } catch (error) {
180
+ console.error(`${lc} ${error.message}`);
181
+ throw error;
182
+ }
183
+ }
184
+
185
+
186
+ /**
187
+ * Prompts the user a form to build the robbot.
188
+ *
189
+ * Once prompted, the robbot is:
190
+ * 1. validated
191
+ * 2. persisted in the given {@link space}
192
+ * 3. registered with the space
193
+ * 4. related to the space's special robbots index
194
+ * 5. new robbot is returned
195
+ *
196
+ * @returns newly created robbot ibgib (witness)
197
+ */
198
+ export async function createNewRobbot({
199
+ // common,
200
+ ibgibs,
201
+ space,
202
+ }: {
203
+ /**
204
+ * Either {@link common} or {@link ibgibs} is required
205
+ * @hack
206
+ */
207
+ ibgibs?: IbGibLocalSpaceService_AllPowerful,
208
+ /**
209
+ * space within which to create the robbot. if not provided, the
210
+ * defaults to the local user space via {@link common} or {@link ibgibs}.
211
+ */
212
+ space: IbGibSpaceAny,
213
+ }): Promise<IbGibRobbotAny | undefined> {
214
+ const lc = `[${createNewRobbot.name}]`;
215
+ try {
216
+ if (logalot) { console.log(`${lc} starting...`); }
217
+
218
+ if (!ibgibs) { throw new Error(`(UNEXPECTED) ibgibs service required. (E: 4be5d20dc81fcdabb8d7d4cd47458522)`); }
219
+
220
+ space = space ?? await ibgibs.getLocalUserSpace({ lock: true });
221
+
222
+ // prompt user to create the ibgib, passing in null because we're
223
+ // creating not editing.
224
+ let resRobbot = await ibgibs.fnPromptRobbot(space, /*ibGib because creating*/null);
225
+
226
+ if (!resRobbot) { throw new Error(`robbot prompt returned nothing. canceled? (E: 1a08529b53bd3d79c6587b196e5e0823)`); }
227
+
228
+ /** this should be the witness class itself at this point. */
229
+ const newRobbot = (resRobbot.newIbGib as IbGibRobbotAny);
230
+ // let loading = await common.loadingCtrl.create({ message: 'creating...' });
231
+ try {
232
+ // await loading.present();
233
+ await delay(1000); // ensure that the user sees a creating message
234
+ let allIbGibs: IbGib_V1[] = [];
235
+ allIbGibs.push(newRobbot);
236
+ resRobbot.intermediateIbGibs?.forEach(x => allIbGibs.push(x));
237
+ resRobbot.dnas?.forEach(x => allIbGibs.push(x));
238
+ for (let i = 0; i < allIbGibs.length; i++) {
239
+ const ibGib = allIbGibs[i];
240
+ const validationErrors = await validateIbGibIntrinsically({ ibGib });
241
+ if ((validationErrors ?? []).length > 0) { throw new Error(`(unexpected) invalid robbot ibgib created. validationErrors: ${validationErrors}. robbot: ${pretty(newRobbot.toIbGibDto())} (E: a683268621cd6dd3dd60310b164c4d22)`); }
242
+ }
243
+
244
+ await persistTransformResult({ resTransform: resRobbot, isMeta: true, space });
245
+ const { zeroSpace, fnBroadcast, fnUpdateBootstrap } = ibgibs;
246
+ await registerNewIbGib({
247
+ ibGib: newRobbot,
248
+ space,
249
+ zeroSpace,
250
+ fnBroadcast: (x: IbGibTimelineUpdateInfo) => fnBroadcast(x),
251
+ fnUpdateBootstrap: (x: IbGibSpaceAny) => fnUpdateBootstrap(x),
252
+ });
253
+
254
+ await rel8ToSpecialIbGib({
255
+ type: "robbots",
256
+ rel8nName: ROBBOT_REL8N_NAME,
257
+ ibGibsToRel8: [newRobbot],
258
+ space,
259
+ zeroSpace,
260
+ fnUpdateBootstrap,
261
+ fnBroadcast,
262
+ });
263
+ } catch (error) {
264
+ console.error(`${lc} ${error.message}`);
265
+ throw error;
266
+ // } finally {
267
+ // await loading.dismiss();
268
+ }
269
+ return newRobbot;
270
+ } catch (error) {
271
+ console.error(`${lc} ${error.message}`);
272
+ return;
273
+ } finally {
274
+ if (logalot) { console.log(`${lc} complete.`); }
275
+ }
276
+ }
277
+
278
+ export class RobbotFormBuilder extends WitnessFormBuilder {
279
+ protected lc: string = `${super.lc}[${RobbotFormBuilder.name}]`;
280
+
281
+ constructor() {
282
+ super();
283
+ this.what = 'robbot';
284
+ }
285
+
286
+ outputPrefix({
287
+ of,
288
+ required,
289
+ }: {
290
+ of: string,
291
+ required?: boolean,
292
+ }): RobbotFormBuilder {
293
+ this.addItem({
294
+ // witness.data.outputPrefix
295
+ name: "outputPrefix",
296
+ description: `Technical setting that sets a prefix for all text output of the robbot.`,
297
+ label: "Output Prefix",
298
+ regexp: ROBBOT_PREFIX_SUFFIX_REGEXP,
299
+ regexpErrorMsg: ROBBOT_PREFIX_SUFFIX_REGEXP_DESC,
300
+ dataType: 'textarea',
301
+ value: of,
302
+ required,
303
+ });
304
+ return this;
305
+ }
306
+
307
+ outputSuffix({
308
+ of,
309
+ required,
310
+ }: {
311
+ of: string,
312
+ required?: boolean,
313
+ }): RobbotFormBuilder {
314
+ this.addItem({
315
+ // witness.data.outputSuffix
316
+ name: "outputSuffix",
317
+ description: `Technical setting that sets a suffix for all text output of the ${this.what}. (like a signature)`,
318
+ label: "Output Suffix",
319
+ regexp: ROBBOT_PREFIX_SUFFIX_REGEXP,
320
+ regexpErrorMsg: ROBBOT_PREFIX_SUFFIX_REGEXP_DESC,
321
+ dataType: 'textarea',
322
+ value: of,
323
+ required,
324
+ });
325
+ return this;
326
+ }
327
+
328
+ }
329
+
330
+ /**
331
+ * checks to see if the comment is an ibgib and if that comment starts
332
+ * with the escape sequence.
333
+ */
334
+ export function isRequestComment({
335
+ ibGib,
336
+ requestEscapeString = DEFAULT_ROBBOT_REQUEST_ESCAPE_STRING,
337
+ }: {
338
+ ibGib: IbGib_V1,
339
+ requestEscapeString?: string,
340
+ }): boolean {
341
+ const lc = `${isRequestComment.name}]`;
342
+ try {
343
+ if (logalot) { console.log(`${lc} starting... (I: d7c49619ffb7a9c26d9d74959b91ae22)`); }
344
+
345
+ if (!isComment({ ibGib })) { return false; /* <<<< returns early */ }
346
+
347
+ let { ib } = ibGib;
348
+ if (!ib) { throw new Error(`ib or ibGib.ib required (E: d92c26b15fc143977955a167b8b67522)`); }
349
+
350
+ requestEscapeString = requestEscapeString || DEFAULT_ROBBOT_REQUEST_ESCAPE_STRING;
351
+
352
+ let { safeIbCommentText } = parseCommentIb({ ib });
353
+
354
+ return safeIbCommentText.startsWith(requestEscapeString);
355
+ } catch (error) {
356
+ console.error(`${lc} ${error.message}`);
357
+ throw error;
358
+ } finally {
359
+ if (logalot) { console.log(`${lc} complete.`); }
360
+ }
361
+ }
362
+
363
+ /**
364
+ * Strips the request escape string and any non-alphanumeric characters except spaces,
365
+ * returning the rest fo the string up to `maxLength`.
366
+ *
367
+ * This does *not* interpret anything beyond this.
368
+ */
369
+ export function getSpaceDelimitedSaferRequestText({
370
+ ibGib,
371
+ requestEscapeString = DEFAULT_ROBBOT_REQUEST_ESCAPE_STRING,
372
+ lowercase,
373
+ maxLength,
374
+ }: {
375
+ ibGib: IbGib_V1,
376
+ requestEscapeString?: string,
377
+ lowercase?: boolean,
378
+ maxLength?: number,
379
+ }): string {
380
+ const lc = `${getSpaceDelimitedSaferRequestText.name}]`;
381
+ try {
382
+ if (logalot) { console.log(`${lc} starting... (I: b4cbe054fe254414b77204ad80e519aa)`); }
383
+
384
+ if (!isComment({ ibGib })) { throw new Error(`ibGib is not a comment (E: ab34df44eb57c170cec6c6db6f4f5722)`); }
385
+
386
+ let { data } = ibGib;
387
+ if (!data) { throw new Error(`ibGib.data required (E: 6155a49a0c1286c0bb8aa6f81c396522)`); }
388
+
389
+ let text: string = data.text;
390
+
391
+ requestEscapeString = requestEscapeString || DEFAULT_ROBBOT_REQUEST_ESCAPE_STRING;
392
+ const length = maxLength || DEFAULT_ROBBOT_REQUEST_MAX_LENGTH;
393
+
394
+ text = getSaferSubstring({
395
+ text: text,
396
+ length,
397
+ keepLiterals: [' ', requestEscapeString]
398
+ });
399
+
400
+ text = text
401
+ .substring(requestEscapeString.length) // remove the escape string
402
+ .trim();
403
+
404
+ if (lowercase) {
405
+ text = text.toLowerCase();
406
+ }
407
+
408
+ return text;
409
+ } catch (error) {
410
+ console.error(`${lc} ${error.message}`);
411
+ throw error;
412
+ } finally {
413
+ if (logalot) { console.log(`${lc} complete.`); }
414
+ }
415
+ }
416
+
417
+ /**
418
+ * Creates space-delimited ib. Extracts certain info from `data` and appends
419
+ * addlDetailsText at the end.
420
+ *
421
+ * atow the schema is:
422
+ *
423
+ * return addlDetailsText ?
424
+ * `${ROBBOT_INTERACTION_ATOM} ${data.type} ${timestampInTicks} ${subjectTjpGibsString} ${addlDetailsText}` :
425
+ * `${ROBBOT_INTERACTION_ATOM} ${data.type} ${timestampInTicks} ${subjectTjpGibsString}`;
426
+ *
427
+ * @returns space-delimited interaction ib
428
+ */
429
+ export function getInteractionIb({
430
+ data,
431
+ addlDetailsText,
432
+ }: {
433
+ data: RobbotInteractionData_V1,
434
+ addlDetailsText?: string,
435
+ }): Ib {
436
+ const lc = `[${getInteractionIb.name}]`;
437
+ try {
438
+ if (logalot) { console.log(`${lc} starting... (I: 9ac657cab7e292e2bd587595757ab622)`); }
439
+ if (!data) { throw new Error(`data required (E: 8fac6ce2ae6dd521255dc8ba241a5222)`); }
440
+ if (!data.type) { throw new Error(`data.type required (E: 77786fe653be04c9fa33e30ac3b77f22)`); }
441
+ let saferType = getSaferSubstring({ text: data.type, length: 32 });
442
+ if (data.type !== saferType) { throw new Error(`invalid data.type (${data.type}). Should be safer like (${saferType}) (E: efe7888da08f148c8972c0923356b122)`); }
443
+
444
+ if (!data.timestamp) { throw new Error(`data.timestamp required (E: 8682a5af1cd48d0cb372b7f519a61e22)`); }
445
+ const dataTimestampIsInt = Number.isInteger(Number.parseInt(data.timestamp));
446
+ if (dataTimestampIsInt) { debugger; }// debug
447
+ const timestampInTicks = dataTimestampIsInt ?
448
+ data.timestamp :
449
+ getTimestampInTicks(data.timestamp);
450
+
451
+ const subjectTjpGibs = data.subjectTjpGibs ?? [];
452
+ let subjectTjpGibsString: string;
453
+ if (subjectTjpGibs.length === 0) {
454
+ if (logalot) { console.log(`${lc} data.subjectTjpGibs is falsy. defaulting subjectTjpGibsString to ${UNDEFINED_INTERACTION_SUBJECTTJPGIBS_STRING} (I: 850477faa7316bb65e6e0e370dc54f22)`); }
455
+ subjectTjpGibsString = UNDEFINED_INTERACTION_SUBJECTTJPGIBS_STRING;
456
+ } else {
457
+ subjectTjpGibsString = subjectTjpGibs.join(DEFAULT_INTERACTION_SUBJECTTJPGIBS_DELIM)
458
+ }
459
+
460
+ if (addlDetailsText) {
461
+ let saferAddlDetailsText = getSaferSubstring({ text: addlDetailsText, length: 64 });
462
+ if (saferAddlDetailsText !== addlDetailsText) {
463
+ console.warn(`${lc} using safer version of addlDetailsText: ${saferAddlDetailsText}. (W: b5516dabaeab4c93996e726e8feffe7f)`)
464
+ addlDetailsText = saferAddlDetailsText;
465
+ }
466
+ }
467
+
468
+ return addlDetailsText ?
469
+ `${ROBBOT_INTERACTION_ATOM} ${data.type} ${timestampInTicks} ${subjectTjpGibsString} ${addlDetailsText}` :
470
+ `${ROBBOT_INTERACTION_ATOM} ${data.type} ${timestampInTicks} ${subjectTjpGibsString}`;
471
+ } catch (error) {
472
+ console.error(`${lc} ${error.message}`);
473
+ throw error;
474
+ } finally {
475
+ if (logalot) { console.log(`${lc} complete.`); }
476
+ }
477
+ }
478
+
479
+ export function parseInteractionIb({
480
+ ib,
481
+ }: {
482
+ ib: Ib,
483
+ }): RobbotInteractionIbInfo {
484
+ const lc = `[${parseInteractionIb.name}]`;
485
+ try {
486
+ if (logalot) { console.log(`${lc} starting... (I: ed5e959a2952fc6684a168ef8e9b6622)`); }
487
+ const ibValidationErrors = validateIb({ ib }) ?? [];
488
+ if (ibValidationErrors.length > 0) { throw new Error(`ib (${ib}) has validationErrors: ${ibValidationErrors} (E: c1b8c65524561ae67f58b237ba12fb22)`); }
489
+
490
+ let [atom, type, timestampInTicks, subjectTjpGibsString, addlDetailsText] = ib.split(' ');
491
+ if (atom !== ROBBOT_INTERACTION_ATOM) {
492
+ console.warn(`${lc} atom !== default robbot interaction atom (${atom} !== ${ROBBOT_INTERACTION_ATOM}) (W: 9102868391174bbc90c54cb53726a4de)`);
493
+ }
494
+ if (!Object.values(RobbotInteractionType).includes((type as any))) {
495
+ console.warn(`${lc} unknown robbot interaction type (${type}). (W: 68e85a9c495542f4a4a164752cc600e3)`);
496
+ }
497
+ let subjectTjpGibs: Gib[] | undefined = undefined;
498
+ if (subjectTjpGibsString !== UNDEFINED_INTERACTION_SUBJECTTJPGIBS_STRING) {
499
+ subjectTjpGibs =
500
+ subjectTjpGibsString.split(DEFAULT_INTERACTION_SUBJECTTJPGIBS_DELIM).filter(x => !!x);
501
+ const invalidTjpGibs = subjectTjpGibs.filter(gib => {
502
+ const validationErrors = validateGib({ gib }) ?? [];
503
+ if (validationErrors.length > 0) {
504
+ console.error(`${lc} tjpGib (${gib}) has validation errors: ${validationErrors} (E: 679a654649ae4945932e85b3ded981be)`);
505
+ return true;
506
+ } else {
507
+ return false;
508
+ }
509
+ });
510
+ if (invalidTjpGibs.length > 0) { throw new Error(`ib contains invalid tjpGibs: ${invalidTjpGibs} (E: 7a5074e2e8685ec28c83954a1c12df22)`); }
511
+ }
512
+
513
+ return { atom, type, timestampInTicks, subjectTjpGibs, addlDetailsText };
514
+ } catch (error) {
515
+ console.error(`${lc} ${error.message}`);
516
+ throw error;
517
+ } finally {
518
+ if (logalot) { console.log(`${lc} complete.`); }
519
+ }
520
+ }
521
+
522
+ export function isInteraction({
523
+ ibGib,
524
+ ib,
525
+ }: {
526
+ ibGib?: IbGib_V1,
527
+ ib?: Ib,
528
+ }): boolean {
529
+ const lc = `[${isInteraction.name}]`;
530
+ try {
531
+ ib = ib ?? ibGib?.ib;
532
+ if (!ib) { throw new Error(`either ib or ibGib required (E: 15786fe75a5219ec7d925189f22d9f22)`); }
533
+ let info = parseInteractionIb({ ib });
534
+ return info.atom === ROBBOT_INTERACTION_ATOM;
535
+ } catch (error) {
536
+ console.error(`${lc} ${error.message}`);
537
+ throw error;
538
+ }
539
+ }
540
+
541
+ /**
542
+ * creates an ibgib stone (no tjp) that contains the interaction info.
543
+ *
544
+ * @returns interaction ibgib stone
545
+ */
546
+ export async function getInteractionIbGib_V1({
547
+ data,
548
+ rel8ns,
549
+ addlDetailsText,
550
+ }: {
551
+ /**
552
+ * beginning data that may be mutated in this function.
553
+ */
554
+ data: RobbotInteractionData_V1,
555
+ /**
556
+ * beginning rel8ns that may be mutated in this function.
557
+ */
558
+ rel8ns?: RobbotInteractionRel8ns_V1,
559
+ /**
560
+ * for use in creating the ib per use case, if provided
561
+ *
562
+ * atow, I'm not using this.
563
+ */
564
+ addlDetailsText?: string,
565
+ }): Promise<RobbotInteractionIbGib_V1> {
566
+ const lc = `[${getInteractionIbGib_V1.name}]`;
567
+ try {
568
+ if (logalot) { console.log(`${lc} starting... (I: 138e6a406e1c600aad5b64e58a250922)`); }
569
+
570
+ if (!data) { throw new Error(`data required (E: 7bdc46e1cfca9c286fc0dad9e8d60722)`); }
571
+
572
+ if (!data.uuid) { data.uuid = await getUUID(); }
573
+
574
+ rel8ns = rel8ns ?? {};
575
+ rel8ns.ancestor = [`${ROBBOT_INTERACTION_ATOM}^${GIB}`];
576
+ delete rel8ns.past;
577
+
578
+ const ib = getInteractionIb({ data, addlDetailsText });
579
+
580
+ const ibGib: RobbotInteractionIbGib_V1 = {
581
+ ib, data, rel8ns,
582
+ };
583
+ ibGib.gib = await getGib({ ibGib, hasTjp: false });
584
+
585
+ return ibGib;
586
+ } catch (error) {
587
+ console.error(`${lc} ${error.message}`);
588
+ throw error;
589
+ } finally {
590
+ if (logalot) { console.log(`${lc} complete.`); }
591
+ }
592
+ }
593
+
594
+ export function getRobbotSessionIb({
595
+ robbot,
596
+ timestampInTicks,
597
+ sessionId,
598
+ contextTjpGib,
599
+ addlMetadata,
600
+ }: {
601
+ robbot: IbGibRobbotAny,
602
+ timestampInTicks: string,
603
+ sessionId: string,
604
+ contextTjpGib: Gib,
605
+ addlMetadata?: string,
606
+ }): string {
607
+ const lc = `[${getRobbotSessionIb.name}]`;
608
+ try {
609
+ // validate
610
+ if (logalot) { console.log(`${lc} starting... (I: 21206e0defe4bf23db96979fb456e822)`); }
611
+ if (!robbot) { throw new Error(`robbot required (E: 200b32bbc4cac516e56d9561a9ffae22)`); }
612
+ if (!robbot.data?.name) { throw new Error(`robbot.data.name required (E: d6470d5a146a1794811b9577ce881522)`); }
613
+ if (!robbot.data.classname) { throw new Error(`robbot.data.classname required (E: 42077779c80889f1079e582d45932e22)`); }
614
+ if (!robbot.data.uuid) { throw new Error(`robbot.data.uuid required (E: 34222f5639c329c99a2007ba6789bb22)`); }
615
+ if (!timestampInTicks) { throw new Error(`timestampInTicks required (E: 17447cb30277af2beea8f2b13266c722)`); }
616
+ if (!sessionId) { throw new Error(`sessionId required (E: 37a1737920996a55f311e79efe558422)`); }
617
+ if (!contextTjpGib) { throw new Error(`contextTjpGib required (E: ad967964b764b077f448121e8b63c822)`); }
618
+ if (addlMetadata) { if (!addlMetadata.match(/^\w+$/)) { throw new Error(`addlMetadata must be alphanumerics only (E: 26f52b1378d1ad01f20f8ef5a5441722)`); } }
619
+
620
+ // prepare
621
+ const { name, classname, uuid } = robbot.data;
622
+ const robbotTjpGib = getGibInfo({ gib: robbot.gib }).tjpGib;
623
+
624
+ // main ib string
625
+ let resultIb = `${ROBBOT_SESSION_ATOM} ${timestampInTicks} ${name} ${classname} ${uuid} ${robbotTjpGib} ${sessionId} ${contextTjpGib}`;
626
+
627
+ // amend if addlMetadata provided
628
+ if (addlMetadata) { resultIb += ` ${addlMetadata}`; }
629
+
630
+ // returns
631
+ return resultIb;
632
+ } catch (error) {
633
+ console.error(`${lc} ${error.message}`);
634
+ throw error;
635
+ } finally {
636
+ if (logalot) { console.log(`${lc} complete.`); }
637
+ }
638
+ }
639
+
640
+ export function parseRobbotSessionIb({
641
+ ib,
642
+ }: {
643
+ ib: Ib,
644
+ }): {
645
+ timestamp: string,
646
+ robbotName: string,
647
+ robbotClassname: string,
648
+ robbotId: string,
649
+ robbotTjpGib: Gib,
650
+ sessionId: string,
651
+ contextTjpGib: Gib,
652
+ addlMetadata: string,
653
+ } {
654
+ const lc = `[${parseRobbotSessionIb.name}]`;
655
+ try {
656
+ if (logalot) { console.log(`${lc} starting... (I: 21206e0defe4bf23db96979fb456e822)`); }
657
+ if (!ib) { throw new Error(`ib required (E: c99627d871dbada4745474d9b63d4822)`); }
658
+
659
+ const pieces = ib.split(' ');
660
+ if (pieces.length !== 8 && pieces.length !== 9) { throw new Error(`invalid ib. should be space-delimited with 8 or 9 pieces, but there were ${pieces.length}. Expected pieces: atom, timestamp, robbotName, robbotClassname, robbotId, robbotTjpGib, sessionId, contextTjpGib, and optional addlMetadata. (E: 239ba7f599ce02a20271dd288c187d22)`); }
661
+
662
+ const [_, timestamp, robbotName, robbotClassname, robbotId, robbotTjpGib, sessionId, contextTjpGib, addlMetadata] = ib.split(' ');
663
+ return {
664
+ timestamp,
665
+ robbotName, robbotClassname, robbotId, robbotTjpGib,
666
+ sessionId,
667
+ contextTjpGib,
668
+ addlMetadata
669
+ };
670
+ } catch (error) {
671
+ console.error(`${lc} ${error.message}`);
672
+ throw error;
673
+ } finally {
674
+ if (logalot) { console.log(`${lc} complete.`); }
675
+ }
676
+ }