@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.
- package/.vscode/core-gib-snippets.code-snippets +189 -0
- package/.vscode/launch.json +24 -0
- package/.vscode/settings.json +56 -0
- package/.vscode/tasks.json +37 -0
- package/CHANGELOG.md +11 -0
- package/README.md +215 -0
- package/dist/common/aws-constants.d.mts +7 -0
- package/dist/common/aws-constants.d.mts.map +1 -0
- package/dist/common/aws-constants.mjs +7 -0
- package/dist/common/aws-constants.mjs.map +1 -0
- package/dist/common/bin/bin-types.d.mts +17 -0
- package/dist/common/bin/bin-types.d.mts.map +1 -0
- package/dist/common/bin/bin-types.mjs +3 -0
- package/dist/common/bin/bin-types.mjs.map +1 -0
- package/dist/common/cache/cache-types.d.mts +57 -0
- package/dist/common/cache/cache-types.d.mts.map +1 -0
- package/dist/common/cache/cache-types.mjs +2 -0
- package/dist/common/cache/cache-types.mjs.map +1 -0
- package/dist/common/comment/comment-constants.d.mts +11 -0
- package/dist/common/comment/comment-constants.d.mts.map +1 -0
- package/dist/common/comment/comment-constants.mjs +11 -0
- package/dist/common/comment/comment-constants.mjs.map +1 -0
- package/dist/common/comment/comment-helper.d.mts +59 -0
- package/dist/common/comment/comment-helper.d.mts.map +1 -0
- package/dist/common/comment/comment-helper.mjs +173 -0
- package/dist/common/comment/comment-helper.mjs.map +1 -0
- package/dist/common/comment/comment-types.d.mts +16 -0
- package/dist/common/comment/comment-types.d.mts.map +1 -0
- package/dist/common/comment/comment-types.mjs +2 -0
- package/dist/common/comment/comment-types.mjs.map +1 -0
- package/dist/common/display/display-helper.d.mts +19 -0
- package/dist/common/display/display-helper.d.mts.map +1 -0
- package/dist/common/display/display-helper.mjs +68 -0
- package/dist/common/display/display-helper.mjs.map +1 -0
- package/dist/common/display/display-types.d.mts +97 -0
- package/dist/common/display/display-types.d.mts.map +1 -0
- package/dist/common/display/display-types.mjs +37 -0
- package/dist/common/display/display-types.mjs.map +1 -0
- package/dist/common/encrypt/encrypt-constants.d.mts +27 -0
- package/dist/common/encrypt/encrypt-constants.d.mts.map +1 -0
- package/dist/common/encrypt/encrypt-constants.mjs +27 -0
- package/dist/common/encrypt/encrypt-constants.mjs.map +1 -0
- package/dist/common/encrypt/encrypt-types.d.mts +116 -0
- package/dist/common/encrypt/encrypt-types.d.mts.map +1 -0
- package/dist/common/encrypt/encrypt-types.mjs +9 -0
- package/dist/common/encrypt/encrypt-types.mjs.map +1 -0
- package/dist/common/error/error-constants.d.mts +9 -0
- package/dist/common/error/error-constants.d.mts.map +1 -0
- package/dist/common/error/error-constants.mjs +9 -0
- package/dist/common/error/error-constants.mjs.map +1 -0
- package/dist/common/error/error-helper.d.mts +43 -0
- package/dist/common/error/error-helper.d.mts.map +1 -0
- package/dist/common/error/error-helper.mjs +167 -0
- package/dist/common/error/error-helper.mjs.map +1 -0
- package/dist/common/error/error-types.d.mts +58 -0
- package/dist/common/error/error-types.d.mts.map +1 -0
- package/dist/common/error/error-types.mjs +2 -0
- package/dist/common/error/error-types.mjs.map +1 -0
- package/dist/common/form/form-helper.d.mts +97 -0
- package/dist/common/form/form-helper.d.mts.map +1 -0
- package/dist/common/form/form-helper.mjs +185 -0
- package/dist/common/form/form-helper.mjs.map +1 -0
- package/dist/common/form/form-items.d.mts +229 -0
- package/dist/common/form/form-items.d.mts.map +1 -0
- package/dist/common/form/form-items.mjs +63 -0
- package/dist/common/form/form-items.mjs.map +1 -0
- package/dist/common/import-export/import-export-types.d.mts +18 -0
- package/dist/common/import-export/import-export-types.d.mts.map +1 -0
- package/dist/common/import-export/import-export-types.mjs +2 -0
- package/dist/common/import-export/import-export-types.mjs.map +1 -0
- package/dist/common/legacy/legacy-types.d.mts +2 -0
- package/dist/common/legacy/legacy-types.d.mts.map +1 -0
- package/dist/common/legacy/legacy-types.mjs +2 -0
- package/dist/common/legacy/legacy-types.mjs.map +1 -0
- package/dist/common/link/link-constants.d.mts +2 -0
- package/dist/common/link/link-constants.d.mts.map +1 -0
- package/dist/common/link/link-constants.mjs +2 -0
- package/dist/common/link/link-constants.mjs.map +1 -0
- package/dist/common/link/link-helper.d.mts +37 -0
- package/dist/common/link/link-helper.d.mts.map +1 -0
- package/dist/common/link/link-helper.mjs +143 -0
- package/dist/common/link/link-helper.mjs.map +1 -0
- package/dist/common/link/link-types.d.mts +14 -0
- package/dist/common/link/link-types.d.mts.map +1 -0
- package/dist/common/link/link-types.mjs +2 -0
- package/dist/common/link/link-types.mjs.map +1 -0
- package/dist/common/other/graph-helper.d.mts +166 -0
- package/dist/common/other/graph-helper.d.mts.map +1 -0
- package/dist/common/other/graph-helper.mjs +710 -0
- package/dist/common/other/graph-helper.mjs.map +1 -0
- package/dist/common/other/ibgib-helper.d.mts +245 -0
- package/dist/common/other/ibgib-helper.d.mts.map +1 -0
- package/dist/common/other/ibgib-helper.mjs +641 -0
- package/dist/common/other/ibgib-helper.mjs.map +1 -0
- package/dist/common/other/other-constants.d.mts +53 -0
- package/dist/common/other/other-constants.d.mts.map +1 -0
- package/dist/common/other/other-constants.mjs +67 -0
- package/dist/common/other/other-constants.mjs.map +1 -0
- package/dist/common/other/other-types.d.mts +166 -0
- package/dist/common/other/other-types.d.mts.map +1 -0
- package/dist/common/other/other-types.mjs +30 -0
- package/dist/common/other/other-types.mjs.map +1 -0
- package/dist/common/other/svg-constants.d.mts +2 -0
- package/dist/common/other/svg-constants.d.mts.map +1 -0
- package/dist/common/other/svg-constants.mjs +2 -0
- package/dist/common/other/svg-constants.mjs.map +1 -0
- package/dist/common/other/svg-helper.d.mts +54 -0
- package/dist/common/other/svg-helper.d.mts.map +1 -0
- package/dist/common/other/svg-helper.mjs +170 -0
- package/dist/common/other/svg-helper.mjs.map +1 -0
- package/dist/common/pic/pic-constants.d.mts +13 -0
- package/dist/common/pic/pic-constants.d.mts.map +1 -0
- package/dist/common/pic/pic-constants.mjs +13 -0
- package/dist/common/pic/pic-constants.mjs.map +1 -0
- package/dist/common/pic/pic-helper.d.mts +70 -0
- package/dist/common/pic/pic-helper.d.mts.map +1 -0
- package/dist/common/pic/pic-helper.mjs +235 -0
- package/dist/common/pic/pic-helper.mjs.map +1 -0
- package/dist/common/pic/pic-types.d.mts +23 -0
- package/dist/common/pic/pic-types.d.mts.map +1 -0
- package/dist/common/pic/pic-types.mjs +2 -0
- package/dist/common/pic/pic-types.mjs.map +1 -0
- package/dist/common/root/root-constants.d.mts +40 -0
- package/dist/common/root/root-constants.d.mts.map +1 -0
- package/dist/common/root/root-constants.mjs +40 -0
- package/dist/common/root/root-constants.mjs.map +1 -0
- package/dist/common/root/root-types.d.mts +9 -0
- package/dist/common/root/root-types.d.mts.map +1 -0
- package/dist/common/root/root-types.mjs +2 -0
- package/dist/common/root/root-types.mjs.map +1 -0
- package/dist/common/tag/tag-constants.d.mts +21 -0
- package/dist/common/tag/tag-constants.d.mts.map +1 -0
- package/dist/common/tag/tag-constants.mjs +28 -0
- package/dist/common/tag/tag-constants.mjs.map +1 -0
- package/dist/common/tag/tag-types.d.mts +14 -0
- package/dist/common/tag/tag-types.d.mts.map +1 -0
- package/dist/common/tag/tag-types.mjs +2 -0
- package/dist/common/tag/tag-types.mjs.map +1 -0
- package/dist/core-constants.d.mts +89 -0
- package/dist/core-constants.d.mts.map +1 -0
- package/dist/core-constants.mjs +484 -0
- package/dist/core-constants.mjs.map +1 -0
- package/dist/core-helper.d.mts +6 -0
- package/dist/core-helper.d.mts.map +1 -0
- package/dist/core-helper.mjs +28 -0
- package/dist/core-helper.mjs.map +1 -0
- package/dist/core-types.d.mts +520 -0
- package/dist/core-types.d.mts.map +1 -0
- package/dist/core-types.mjs +2 -0
- package/dist/core-types.mjs.map +1 -0
- package/dist/index.d.mts +2 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +3 -0
- package/dist/index.mjs.map +1 -0
- package/dist/witness/app/app-base-v1.d.mts +130 -0
- package/dist/witness/app/app-base-v1.d.mts.map +1 -0
- package/dist/witness/app/app-base-v1.mjs +462 -0
- package/dist/witness/app/app-base-v1.mjs.map +1 -0
- package/dist/witness/app/app-constants.d.mts +10 -0
- package/dist/witness/app/app-constants.d.mts.map +1 -0
- package/dist/witness/app/app-constants.mjs +13 -0
- package/dist/witness/app/app-constants.mjs.map +1 -0
- package/dist/witness/app/app-helper.d.mts +85 -0
- package/dist/witness/app/app-helper.d.mts.map +1 -0
- package/dist/witness/app/app-helper.mjs +258 -0
- package/dist/witness/app/app-helper.mjs.map +1 -0
- package/dist/witness/app/app-types.d.mts +211 -0
- package/dist/witness/app/app-types.d.mts.map +1 -0
- package/dist/witness/app/app-types.mjs +49 -0
- package/dist/witness/app/app-types.mjs.map +1 -0
- package/dist/witness/app/chat-app/chat-app-types.d.mts +18 -0
- package/dist/witness/app/chat-app/chat-app-types.d.mts.map +1 -0
- package/dist/witness/app/chat-app/chat-app-types.mjs +25 -0
- package/dist/witness/app/chat-app/chat-app-types.mjs.map +1 -0
- package/dist/witness/app/flash-app/flash-app-types.d.mts +16 -0
- package/dist/witness/app/flash-app/flash-app-types.d.mts.map +1 -0
- package/dist/witness/app/flash-app/flash-app-types.mjs +23 -0
- package/dist/witness/app/flash-app/flash-app-types.mjs.map +1 -0
- package/dist/witness/app/raw-app/raw-app-types.d.mts +18 -0
- package/dist/witness/app/raw-app/raw-app-types.d.mts.map +1 -0
- package/dist/witness/app/raw-app/raw-app-types.mjs +25 -0
- package/dist/witness/app/raw-app/raw-app-types.mjs.map +1 -0
- package/dist/witness/app/todo-app/todo-app-types.d.ts +33 -0
- package/dist/witness/app/todo-app/todo-app-types.d.ts.map +1 -0
- package/dist/witness/app/todo-app/todo-app-types.js +31 -0
- package/dist/witness/app/todo-app/todo-app-types.js.map +1 -0
- package/dist/witness/robbot/robbot-base-v1.d.ts +432 -0
- package/dist/witness/robbot/robbot-base-v1.d.ts.map +1 -0
- package/dist/witness/robbot/robbot-base-v1.js +1407 -0
- package/dist/witness/robbot/robbot-base-v1.js.map +1 -0
- package/dist/witness/robbot/robbot-constants.d.mts +24 -0
- package/dist/witness/robbot/robbot-constants.d.mts.map +1 -0
- package/dist/witness/robbot/robbot-constants.mjs +24 -0
- package/dist/witness/robbot/robbot-constants.mjs.map +1 -0
- package/dist/witness/robbot/robbot-helper.d.mts +152 -0
- package/dist/witness/robbot/robbot-helper.d.mts.map +1 -0
- package/dist/witness/robbot/robbot-helper.mjs +609 -0
- package/dist/witness/robbot/robbot-helper.mjs.map +1 -0
- package/dist/witness/robbot/robbot-types.d.mts +539 -0
- package/dist/witness/robbot/robbot-types.d.mts.map +1 -0
- package/dist/witness/robbot/robbot-types.mjs +294 -0
- package/dist/witness/robbot/robbot-types.mjs.map +1 -0
- package/dist/witness/space/bootstrap/bootstrap-constants.d.mts +14 -0
- package/dist/witness/space/bootstrap/bootstrap-constants.d.mts.map +1 -0
- package/dist/witness/space/bootstrap/bootstrap-constants.mjs +15 -0
- package/dist/witness/space/bootstrap/bootstrap-constants.mjs.map +1 -0
- package/dist/witness/space/inner-space-v1.d.ts +63 -0
- package/dist/witness/space/inner-space-v1.d.ts.map +1 -0
- package/dist/witness/space/inner-space-v1.js +356 -0
- package/dist/witness/space/inner-space-v1.js.map +1 -0
- package/dist/witness/space/outer-space/outer-space-constants.d.mts +2 -0
- package/dist/witness/space/outer-space/outer-space-constants.d.mts.map +1 -0
- package/dist/witness/space/outer-space/outer-space-constants.mjs +2 -0
- package/dist/witness/space/outer-space/outer-space-constants.mjs.map +1 -0
- package/dist/witness/space/outer-space/outer-space-helper.d.mts +28 -0
- package/dist/witness/space/outer-space/outer-space-helper.d.mts.map +1 -0
- package/dist/witness/space/outer-space/outer-space-helper.mjs +87 -0
- package/dist/witness/space/outer-space/outer-space-helper.mjs.map +1 -0
- package/dist/witness/space/outer-space/outer-space-types.d.mts +548 -0
- package/dist/witness/space/outer-space/outer-space-types.d.mts.map +1 -0
- package/dist/witness/space/outer-space/outer-space-types.mjs +118 -0
- package/dist/witness/space/outer-space/outer-space-types.mjs.map +1 -0
- package/dist/witness/space/space-base-v1.d.mts +147 -0
- package/dist/witness/space/space-base-v1.d.mts.map +1 -0
- package/dist/witness/space/space-base-v1.mjs +350 -0
- package/dist/witness/space/space-base-v1.mjs.map +1 -0
- package/dist/witness/space/space-constants.d.mts +181 -0
- package/dist/witness/space/space-constants.d.mts.map +1 -0
- package/dist/witness/space/space-constants.mjs +192 -0
- package/dist/witness/space/space-constants.mjs.map +1 -0
- package/dist/witness/space/space-helper.d.mts +666 -0
- package/dist/witness/space/space-helper.d.mts.map +1 -0
- package/dist/witness/space/space-helper.mjs +2830 -0
- package/dist/witness/space/space-helper.mjs.map +1 -0
- package/dist/witness/space/space-types.d.mts +422 -0
- package/dist/witness/space/space-types.d.mts.map +1 -0
- package/dist/witness/space/space-types.mjs +52 -0
- package/dist/witness/space/space-types.mjs.map +1 -0
- package/dist/witness/witness-base-v1.d.ts +144 -0
- package/dist/witness/witness-base-v1.d.ts.map +1 -0
- package/dist/witness/witness-base-v1.js +300 -0
- package/dist/witness/witness-base-v1.js.map +1 -0
- package/dist/witness/witness-constants.d.mts +3 -0
- package/dist/witness/witness-constants.d.mts.map +1 -0
- package/dist/witness/witness-constants.mjs +3 -0
- package/dist/witness/witness-constants.mjs.map +1 -0
- package/dist/witness/witness-form-builder.d.mts +45 -0
- package/dist/witness/witness-form-builder.d.mts.map +1 -0
- package/dist/witness/witness-form-builder.mjs +95 -0
- package/dist/witness/witness-form-builder.mjs.map +1 -0
- package/dist/witness/witness-helper.d.mts +89 -0
- package/dist/witness/witness-helper.d.mts.map +1 -0
- package/dist/witness/witness-helper.mjs +229 -0
- package/dist/witness/witness-helper.mjs.map +1 -0
- package/dist/witness/witness-types.d.mts +211 -0
- package/dist/witness/witness-types.d.mts.map +1 -0
- package/dist/witness/witness-types.mjs +2 -0
- package/dist/witness/witness-types.mjs.map +1 -0
- package/jasmine-browser.json +18 -0
- package/jasmine.json +6 -0
- package/package.json +67 -0
- package/src/assumptions.spec.mts +45 -0
- package/src/common/aws-constants.mts +5 -0
- package/src/common/bin/bin-types.mts +17 -0
- package/src/common/cache/cache-types.mts +53 -0
- package/src/common/comment/comment-constants.mts +10 -0
- package/src/common/comment/comment-helper.mts +211 -0
- package/src/common/comment/comment-types.mts +19 -0
- package/src/common/display/display-helper.mts +88 -0
- package/src/common/display/display-types.mts +108 -0
- package/src/common/encrypt/encrypt-constants.mts +28 -0
- package/src/common/encrypt/encrypt-types.mts +130 -0
- package/src/common/error/error-constants.mts +8 -0
- package/src/common/error/error-helper.mts +155 -0
- package/src/common/error/error-types.mts +62 -0
- package/src/common/form/form-helper.mts +253 -0
- package/src/common/form/form-items.mts +236 -0
- package/src/common/import-export/import-export-types.mts +18 -0
- package/src/common/legacy/about-legacy.md +0 -0
- package/src/common/legacy/legacy-types.mts +0 -0
- package/src/common/link/link-constants.mts +1 -0
- package/src/common/link/link-helper.mts +155 -0
- package/src/common/link/link-types.mts +16 -0
- package/src/common/other/graph-helper.mts +853 -0
- package/src/common/other/ibgib-helper.mts +671 -0
- package/src/common/other/other-constants.mts +76 -0
- package/src/common/other/other-types.mts +186 -0
- package/src/common/other/svg-constants.mts +1 -0
- package/src/common/other/svg-helper.mts +238 -0
- package/src/common/pic/pic-constants.mts +13 -0
- package/src/common/pic/pic-helper.mts +295 -0
- package/src/common/pic/pic-types.mts +29 -0
- package/src/common/root/root-constants.mts +41 -0
- package/src/common/root/root-types.mts +8 -0
- package/src/common/tag/tag-constants.mts +34 -0
- package/src/common/tag/tag-types.mts +19 -0
- package/src/core-constants.mts +506 -0
- package/src/core-helper.mts +33 -0
- package/src/core-types.mts +519 -0
- package/src/helper.spec.mts +64 -0
- package/src/index.mts +1 -0
- package/src/witness/app/app-base-v1.mts +584 -0
- package/src/witness/app/app-constants.mts +16 -0
- package/src/witness/app/app-helper.mts +322 -0
- package/src/witness/app/app-types.mts +252 -0
- package/src/witness/app/chat-app/chat-app-types.mts +40 -0
- package/src/witness/app/flash-app/flash-app-types.mts +38 -0
- package/src/witness/app/raw-app/raw-app-types.mts +40 -0
- package/src/witness/app/todo-app/todo-app-types.ts +59 -0
- package/src/witness/robbot/robbot-base-v1.ts +1531 -0
- package/src/witness/robbot/robbot-constants.mts +25 -0
- package/src/witness/robbot/robbot-helper.mts +676 -0
- package/src/witness/robbot/robbot-helper.spec.mts +135 -0
- package/src/witness/robbot/robbot-types.mts +797 -0
- package/src/witness/space/bootstrap/bootstrap-constants.mts +15 -0
- package/src/witness/space/inner-space-v1.ts +372 -0
- package/src/witness/space/outer-space/outer-space-constants.mts +1 -0
- package/src/witness/space/outer-space/outer-space-helper.mts +91 -0
- package/src/witness/space/outer-space/outer-space-types.mts +627 -0
- package/src/witness/space/space-base-v1.mts +414 -0
- package/src/witness/space/space-constants.mts +208 -0
- package/src/witness/space/space-helper.mts +3242 -0
- package/src/witness/space/space-types.mts +476 -0
- package/src/witness/witness-base-v1.ts +325 -0
- package/src/witness/witness-constants.mts +2 -0
- package/src/witness/witness-form-builder.mts +128 -0
- package/src/witness/witness-helper.mts +256 -0
- package/src/witness/witness-types.mts +249 -0
- package/tsconfig.json +15 -0
- 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
|
+
}
|