@ibgib/node-gib 0.0.10 → 0.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assumptions.respec.mjs.map +1 -1
- package/dist/email/aws/aws-sigv4-helper.d.mts +26 -0
- package/dist/email/aws/aws-sigv4-helper.d.mts.map +1 -0
- package/dist/email/aws/aws-sigv4-helper.mjs +94 -0
- package/dist/email/aws/aws-sigv4-helper.mjs.map +1 -0
- package/dist/email/aws/email-receiver-aws.d.mts +13 -0
- package/dist/email/aws/email-receiver-aws.d.mts.map +1 -0
- package/dist/email/aws/email-receiver-aws.mjs +97 -0
- package/dist/email/aws/email-receiver-aws.mjs.map +1 -0
- package/dist/email/aws/email-sender-aws.d.mts +23 -0
- package/dist/email/aws/email-sender-aws.d.mts.map +1 -0
- package/dist/email/aws/email-sender-aws.mjs +106 -0
- package/dist/email/aws/email-sender-aws.mjs.map +1 -0
- package/dist/email/aws/index.d.mts +7 -0
- package/dist/email/aws/index.d.mts.map +1 -0
- package/dist/email/aws/index.mjs +7 -0
- package/dist/email/aws/index.mjs.map +1 -0
- package/dist/email/email-constants.d.mts +15 -0
- package/dist/email/email-constants.d.mts.map +1 -0
- package/dist/email/email-constants.mjs +15 -0
- package/dist/email/email-constants.mjs.map +1 -0
- package/dist/email/email-helpers.d.mts +35 -0
- package/dist/email/email-helpers.d.mts.map +1 -0
- package/dist/email/email-helpers.mjs +144 -0
- package/dist/email/email-helpers.mjs.map +1 -0
- package/dist/email/email-receiver.d.mts +12 -0
- package/dist/email/email-receiver.d.mts.map +1 -0
- package/dist/email/email-receiver.mjs +23 -0
- package/dist/email/email-receiver.mjs.map +1 -0
- package/dist/email/email-sender.d.mts +13 -0
- package/dist/email/email-sender.d.mts.map +1 -0
- package/dist/email/email-sender.mjs +35 -0
- package/dist/email/email-sender.mjs.map +1 -0
- package/dist/email/email-service.respec.d.mts +2 -0
- package/dist/email/email-service.respec.d.mts.map +1 -0
- package/dist/email/email-service.respec.mjs +115 -0
- package/dist/email/email-service.respec.mjs.map +1 -0
- package/dist/email/email-types.d.mts +53 -0
- package/dist/email/email-types.d.mts.map +1 -0
- package/dist/email/email-types.mjs +5 -0
- package/dist/email/email-types.mjs.map +1 -0
- package/dist/email/index.d.mts +11 -0
- package/dist/email/index.d.mts.map +1 -0
- package/dist/email/index.mjs +11 -0
- package/dist/email/index.mjs.map +1 -0
- package/dist/email/mock/email-sender-mock.d.mts +20 -0
- package/dist/email/mock/email-sender-mock.d.mts.map +1 -0
- package/dist/email/mock/email-sender-mock.mjs +47 -0
- package/dist/email/mock/email-sender-mock.mjs.map +1 -0
- package/dist/email/mock/index.d.mts +5 -0
- package/dist/email/mock/index.d.mts.map +1 -0
- package/dist/email/mock/index.mjs +5 -0
- package/dist/email/mock/index.mjs.map +1 -0
- package/dist/index.d.mts +13 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +14 -0
- package/dist/index.mjs.map +1 -0
- package/dist/respec-gib.node.mjs +3 -4
- package/dist/respec-gib.node.mjs.map +1 -1
- package/dist/serve-gib/bootstrap-helper.d.mts +27 -0
- package/dist/serve-gib/bootstrap-helper.d.mts.map +1 -0
- package/dist/serve-gib/bootstrap-helper.mjs +116 -0
- package/dist/serve-gib/bootstrap-helper.mjs.map +1 -0
- package/dist/serve-gib/bootstrap-helper.respec.d.mts +2 -0
- package/dist/serve-gib/bootstrap-helper.respec.d.mts.map +1 -0
- package/dist/serve-gib/bootstrap-helper.respec.mjs +85 -0
- package/dist/serve-gib/bootstrap-helper.respec.mjs.map +1 -0
- package/dist/serve-gib/constants.d.mts +2 -0
- package/dist/serve-gib/constants.d.mts.map +1 -0
- package/dist/serve-gib/constants.mjs +2 -0
- package/dist/serve-gib/constants.mjs.map +1 -0
- package/dist/serve-gib/handlers/api/debug/ws-echo.handler.d.mts +39 -0
- package/dist/serve-gib/handlers/api/debug/ws-echo.handler.d.mts.map +1 -0
- package/dist/serve-gib/handlers/api/debug/ws-echo.handler.mjs +99 -0
- package/dist/serve-gib/handlers/api/debug/ws-echo.handler.mjs.map +1 -0
- package/dist/serve-gib/handlers/api/email/email-inbound.handler.d.mts +25 -0
- package/dist/serve-gib/handlers/api/email/email-inbound.handler.d.mts.map +1 -0
- package/dist/serve-gib/handlers/api/email/email-inbound.handler.mjs +54 -0
- package/dist/serve-gib/handlers/api/email/email-inbound.handler.mjs.map +1 -0
- package/dist/serve-gib/handlers/api/email/email-outbound.handler.d.mts +24 -0
- package/dist/serve-gib/handlers/api/email/email-outbound.handler.d.mts.map +1 -0
- package/dist/serve-gib/handlers/api/email/email-outbound.handler.mjs +72 -0
- package/dist/serve-gib/handlers/api/email/email-outbound.handler.mjs.map +1 -0
- package/dist/serve-gib/handlers/api/health.handler.d.mts +14 -0
- package/dist/serve-gib/handlers/api/health.handler.d.mts.map +1 -0
- package/dist/serve-gib/handlers/api/health.handler.mjs +21 -0
- package/dist/serve-gib/handlers/api/health.handler.mjs.map +1 -0
- package/dist/serve-gib/handlers/api/health.respec.d.mts +2 -0
- package/dist/serve-gib/handlers/api/health.respec.d.mts.map +1 -0
- package/dist/serve-gib/handlers/api/health.respec.mjs +47 -0
- package/dist/serve-gib/handlers/api/health.respec.mjs.map +1 -0
- package/dist/serve-gib/handlers/api/ibgib/ibgib-handler-types.d.mts +41 -0
- package/dist/serve-gib/handlers/api/ibgib/ibgib-handler-types.d.mts.map +1 -0
- package/dist/serve-gib/handlers/api/ibgib/ibgib-handler-types.mjs +34 -0
- package/dist/serve-gib/handlers/api/ibgib/ibgib-handler-types.mjs.map +1 -0
- package/dist/serve-gib/handlers/api/ibgib/ibgib.handler.d.mts +26 -0
- package/dist/serve-gib/handlers/api/ibgib/ibgib.handler.d.mts.map +1 -0
- package/dist/serve-gib/handlers/api/ibgib/ibgib.handler.mjs +179 -0
- package/dist/serve-gib/handlers/api/ibgib/ibgib.handler.mjs.map +1 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-check-email.handler.d.mts +23 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-check-email.handler.d.mts.map +1 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-check-email.handler.mjs +52 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-check-email.handler.mjs.map +1 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-evolve.handler.d.mts +44 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-evolve.handler.d.mts.map +1 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-evolve.handler.mjs +127 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-evolve.handler.mjs.map +1 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-genesis.handler.d.mts +45 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-genesis.handler.d.mts.map +1 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-genesis.handler.mjs +159 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-genesis.handler.mjs.map +1 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-get.handler.d.mts +25 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-get.handler.d.mts.map +1 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-get.handler.mjs +183 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-get.handler.mjs.map +1 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-get.respec.d.mts +2 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-get.respec.d.mts.map +1 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-get.respec.mjs +98 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-get.respec.mjs.map +1 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-handler-types.d.mts +22 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-handler-types.d.mts.map +1 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-handler-types.mjs +19 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-handler-types.mjs.map +1 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-lookup.handler.d.mts +19 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-lookup.handler.d.mts.map +1 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-lookup.handler.mjs +82 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-lookup.handler.mjs.map +1 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-post.handler.d.mts +20 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-post.handler.d.mts.map +1 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-post.handler.mjs +77 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-post.handler.mjs.map +1 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-post.respec.d.mts +2 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-post.respec.d.mts.map +1 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-post.respec.mjs +131 -0
- package/dist/serve-gib/handlers/api/keystone/keystone-post.respec.mjs.map +1 -0
- package/dist/serve-gib/handlers/api/keystone/sso-config.handler.d.mts +23 -0
- package/dist/serve-gib/handlers/api/keystone/sso-config.handler.d.mts.map +1 -0
- package/dist/serve-gib/handlers/api/keystone/sso-config.handler.mjs +62 -0
- package/dist/serve-gib/handlers/api/keystone/sso-config.handler.mjs.map +1 -0
- package/dist/serve-gib/handlers/api/keystone/sso-link.handler.d.mts +23 -0
- package/dist/serve-gib/handlers/api/keystone/sso-link.handler.d.mts.map +1 -0
- package/dist/serve-gib/handlers/api/keystone/sso-link.handler.mjs +118 -0
- package/dist/serve-gib/handlers/api/keystone/sso-link.handler.mjs.map +1 -0
- package/dist/serve-gib/handlers/api/keystone/sso-login.handler.d.mts +24 -0
- package/dist/serve-gib/handlers/api/keystone/sso-login.handler.d.mts.map +1 -0
- package/dist/serve-gib/handlers/api/keystone/sso-login.handler.mjs +160 -0
- package/dist/serve-gib/handlers/api/keystone/sso-login.handler.mjs.map +1 -0
- package/dist/serve-gib/handlers/error-handler.d.mts +14 -0
- package/dist/serve-gib/handlers/error-handler.d.mts.map +1 -0
- package/dist/serve-gib/handlers/error-handler.mjs +35 -0
- package/dist/serve-gib/handlers/error-handler.mjs.map +1 -0
- package/dist/serve-gib/handlers/handler-base.d.mts +129 -0
- package/dist/serve-gib/handlers/handler-base.d.mts.map +1 -0
- package/dist/serve-gib/handlers/handler-base.mjs +402 -0
- package/dist/serve-gib/handlers/handler-base.mjs.map +1 -0
- package/dist/serve-gib/handlers/static-handler.d.mts +17 -0
- package/dist/serve-gib/handlers/static-handler.d.mts.map +1 -0
- package/dist/serve-gib/handlers/static-handler.mjs +85 -0
- package/dist/serve-gib/handlers/static-handler.mjs.map +1 -0
- package/dist/serve-gib/handlers/ws/sync-upgrade-handler-base.d.mts +35 -0
- package/dist/serve-gib/handlers/ws/sync-upgrade-handler-base.d.mts.map +1 -0
- package/dist/serve-gib/handlers/ws/sync-upgrade-handler-base.mjs +219 -0
- package/dist/serve-gib/handlers/ws/sync-upgrade-handler-base.mjs.map +1 -0
- package/dist/serve-gib/handlers/ws/sync-upgrade.handler.d.mts +21 -0
- package/dist/serve-gib/handlers/ws/sync-upgrade.handler.d.mts.map +1 -0
- package/dist/serve-gib/handlers/ws/sync-upgrade.handler.mjs +21 -0
- package/dist/serve-gib/handlers/ws/sync-upgrade.handler.mjs.map +1 -0
- package/dist/serve-gib/handlers/ws/ws-helper.d.mts +29 -0
- package/dist/serve-gib/handlers/ws/ws-helper.d.mts.map +1 -0
- package/dist/serve-gib/handlers/ws/ws-helper.mjs +195 -0
- package/dist/serve-gib/handlers/ws/ws-helper.mjs.map +1 -0
- package/dist/serve-gib/handlers/ws/ws-types.d.mts +32 -0
- package/dist/serve-gib/handlers/ws/ws-types.d.mts.map +1 -0
- package/dist/serve-gib/handlers/ws/ws-types.mjs +2 -0
- package/dist/serve-gib/handlers/ws/ws-types.mjs.map +1 -0
- package/dist/serve-gib/identity-index/identity-index-constants.d.mts +4 -0
- package/dist/serve-gib/identity-index/identity-index-constants.d.mts.map +1 -0
- package/dist/serve-gib/identity-index/identity-index-constants.mjs +4 -0
- package/dist/serve-gib/identity-index/identity-index-constants.mjs.map +1 -0
- package/dist/serve-gib/identity-index/identity-index-helpers.d.mts +35 -0
- package/dist/serve-gib/identity-index/identity-index-helpers.d.mts.map +1 -0
- package/dist/serve-gib/identity-index/identity-index-helpers.mjs +69 -0
- package/dist/serve-gib/identity-index/identity-index-helpers.mjs.map +1 -0
- package/dist/serve-gib/identity-index/identity-index-service.d.mts +41 -0
- package/dist/serve-gib/identity-index/identity-index-service.d.mts.map +1 -0
- package/dist/serve-gib/identity-index/identity-index-service.mjs +86 -0
- package/dist/serve-gib/identity-index/identity-index-service.mjs.map +1 -0
- package/dist/serve-gib/identity-index/identity-index-service.respec.d.mts +2 -0
- package/dist/serve-gib/identity-index/identity-index-service.respec.d.mts.map +1 -0
- package/dist/serve-gib/identity-index/identity-index-service.respec.mjs +109 -0
- package/dist/serve-gib/identity-index/identity-index-service.respec.mjs.map +1 -0
- package/dist/serve-gib/identity-index/identity-index-types.d.mts +31 -0
- package/dist/serve-gib/identity-index/identity-index-types.d.mts.map +1 -0
- package/dist/serve-gib/identity-index/identity-index-types.mjs +2 -0
- package/dist/serve-gib/identity-index/identity-index-types.mjs.map +1 -0
- package/dist/serve-gib/index.d.mts +50 -0
- package/dist/serve-gib/index.d.mts.map +1 -0
- package/dist/serve-gib/index.mjs +80 -0
- package/dist/serve-gib/index.mjs.map +1 -0
- package/dist/serve-gib/keystone-schema-helpers.d.mts +50 -0
- package/dist/serve-gib/keystone-schema-helpers.d.mts.map +1 -0
- package/dist/serve-gib/keystone-schema-helpers.mjs +99 -0
- package/dist/serve-gib/keystone-schema-helpers.mjs.map +1 -0
- package/dist/serve-gib/keystone-schema-helpers.respec.d.mts +2 -0
- package/dist/serve-gib/keystone-schema-helpers.respec.d.mts.map +1 -0
- package/dist/serve-gib/keystone-schema-helpers.respec.mjs +68 -0
- package/dist/serve-gib/keystone-schema-helpers.respec.mjs.map +1 -0
- package/dist/serve-gib/metaspace-nodeindexedspace/metaspace-nodeindexedspace.d.mts +38 -0
- package/dist/serve-gib/metaspace-nodeindexedspace/metaspace-nodeindexedspace.d.mts.map +1 -0
- package/dist/serve-gib/metaspace-nodeindexedspace/metaspace-nodeindexedspace.mjs +85 -0
- package/dist/serve-gib/metaspace-nodeindexedspace/metaspace-nodeindexedspace.mjs.map +1 -0
- package/dist/serve-gib/path-constants.d.mts +102 -0
- package/dist/serve-gib/path-constants.d.mts.map +1 -0
- package/dist/serve-gib/path-constants.mjs +107 -0
- package/dist/serve-gib/path-constants.mjs.map +1 -0
- package/dist/serve-gib/path-helper.d.mts +23 -0
- package/dist/serve-gib/path-helper.d.mts.map +1 -0
- package/dist/serve-gib/path-helper.mjs +107 -0
- package/dist/serve-gib/path-helper.mjs.map +1 -0
- package/dist/serve-gib/path-helper.respec.d.mts +2 -0
- package/dist/serve-gib/path-helper.respec.d.mts.map +1 -0
- package/dist/serve-gib/path-helper.respec.mjs +83 -0
- package/dist/serve-gib/path-helper.respec.mjs.map +1 -0
- package/dist/serve-gib/serve-gib-helpers.d.mts +14 -0
- package/dist/serve-gib/serve-gib-helpers.d.mts.map +1 -0
- package/dist/serve-gib/serve-gib-helpers.mjs +30 -0
- package/dist/serve-gib/serve-gib-helpers.mjs.map +1 -0
- package/dist/serve-gib/serve-gib-v1.d.mts +40 -0
- package/dist/serve-gib/serve-gib-v1.d.mts.map +1 -0
- package/dist/serve-gib/serve-gib-v1.mjs +157 -0
- package/dist/serve-gib/serve-gib-v1.mjs.map +1 -0
- package/dist/serve-gib/serve-gib.respec.d.mts +2 -0
- package/dist/serve-gib/serve-gib.respec.d.mts.map +1 -0
- package/dist/serve-gib/serve-gib.respec.mjs +85 -0
- package/dist/serve-gib/serve-gib.respec.mjs.map +1 -0
- package/dist/serve-gib/server-constants.d.mts +3 -0
- package/dist/serve-gib/server-constants.d.mts.map +1 -0
- package/dist/serve-gib/server-constants.mjs +3 -0
- package/dist/serve-gib/server-constants.mjs.map +1 -0
- package/dist/serve-gib/types.d.mts +94 -0
- package/dist/serve-gib/types.d.mts.map +1 -0
- package/dist/serve-gib/types.mjs +7 -0
- package/dist/serve-gib/types.mjs.map +1 -0
- package/dist/witness/space/metaspace/metaspace-nodespace/metaspace-nodespace-helper.mjs.map +1 -1
- package/dist/witness/space/metaspace/metaspace-nodespace/metaspace-nodespace.d.mts +5 -0
- package/dist/witness/space/metaspace/metaspace-nodespace/metaspace-nodespace.d.mts.map +1 -1
- package/dist/witness/space/metaspace/metaspace-nodespace/metaspace-nodespace.mjs +37 -0
- package/dist/witness/space/metaspace/metaspace-nodespace/metaspace-nodespace.mjs.map +1 -1
- package/dist/witness/space/node-filesystem-space/node-filesystem-space-helper.mjs +1 -1
- package/dist/witness/space/node-filesystem-space/node-filesystem-space-helper.mjs.map +1 -1
- package/dist/witness/space/node-filesystem-space/node-filesystem-space-types.d.mts.map +1 -1
- package/dist/witness/space/node-filesystem-space/node-filesystem-space-v1.d.mts.map +1 -1
- package/dist/witness/space/node-filesystem-space/node-filesystem-space-v1.mjs.map +1 -1
- package/dist/witness/space/node-filesystem-space/node-indexed-filesystem-space/node-indexed-filesystem-space-v1.d.mts.map +1 -1
- package/dist/witness/space/node-filesystem-space/node-indexed-filesystem-space/respec/testSpace_createAndInit.node-indexed-filesystem-space-v1.respec.mjs.map +1 -1
- package/dist/witness/space/node-filesystem-space/node-indexed-filesystem-space/respec/testSpace_persistTransformResult.node-indexed-filesystem-space-v1.respec.mjs.map +1 -1
- package/dist/witness/space/node-filesystem-space/node-indexed-filesystem-space/respec/testSpace_putGetDelete.node-indexed-filesystem-space-v1.respec.mjs.map +1 -1
- package/dist/witness/space/node-filesystem-space/node-indexed-filesystem-space/respec/testSpace_registerNewIbGib_GetLatest.node-indexed-filesystem-space-v1.respec.mjs.map +1 -1
- package/dist/witness/space/node-filesystem-space/respec/testSpace_createAndInit.node-filesystem-space-v1.respec.mjs.map +1 -1
- package/dist/witness/space/node-filesystem-space/respec/testSpace_persistTransformResult.node-filesystem-space-v1.respec.mjs.map +1 -1
- package/dist/witness/space/node-filesystem-space/respec/testSpace_putGetDelete.node-filesystem-space-v1.respec.mjs.map +1 -1
- package/dist/witness/space/node-filesystem-space/respec/testSpace_registerNewIbGib_GetLatest.node-filesystem-space-v1.respec.mjs.map +1 -1
- package/package.json +2 -2
- package/src/email/aws/aws-sigv4-helper.mts +139 -0
- package/src/email/aws/email-receiver-aws.mts +107 -0
- package/src/email/aws/email-sender-aws.mts +130 -0
- package/src/email/aws/index.mts +7 -0
- package/src/email/email-constants.mts +18 -0
- package/src/email/email-helpers.mts +160 -0
- package/src/email/email-receiver.mts +29 -0
- package/src/email/email-sender.mts +44 -0
- package/src/email/email-service.respec.mts +134 -0
- package/src/email/email-types.mts +59 -0
- package/src/email/index.mts +11 -0
- package/src/email/mock/email-sender-mock.mts +54 -0
- package/src/email/mock/index.mts +5 -0
- package/src/index.mts +41 -0
- package/src/respec-gib.node.mts +4 -5
- package/src/serve-gib/CHANGELOG.md +34 -0
- package/src/serve-gib/README.md +77 -0
- package/src/serve-gib/SERVE_REFACTOR_IMPLEMENTATION.md +112 -0
- package/src/serve-gib/bootstrap-helper.mts +141 -0
- package/src/serve-gib/bootstrap-helper.respec.mts +100 -0
- package/src/serve-gib/constants.mts +1 -0
- package/src/serve-gib/handlers/api/debug/ws-echo.handler.mts +105 -0
- package/src/serve-gib/handlers/api/email/email-inbound.handler.mts +67 -0
- package/src/serve-gib/handlers/api/email/email-outbound.handler.mts +82 -0
- package/src/serve-gib/handlers/api/health.handler.mts +23 -0
- package/src/serve-gib/handlers/api/health.respec.mts +51 -0
- package/src/serve-gib/handlers/api/ibgib/ibgib-handler-types.mts +49 -0
- package/src/serve-gib/handlers/api/ibgib/ibgib.handler.mts +176 -0
- package/src/serve-gib/handlers/api/keystone/keystone-check-email.handler.mts +60 -0
- package/src/serve-gib/handlers/api/keystone/keystone-evolve.handler.mts +150 -0
- package/src/serve-gib/handlers/api/keystone/keystone-genesis.handler.mts +171 -0
- package/src/serve-gib/handlers/api/keystone/keystone-get.handler.mts +198 -0
- package/src/serve-gib/handlers/api/keystone/keystone-get.respec.mts +106 -0
- package/src/serve-gib/handlers/api/keystone/keystone-handler-types.mts +29 -0
- package/src/serve-gib/handlers/api/keystone/keystone-lookup.handler.mts +95 -0
- package/src/serve-gib/handlers/api/keystone/keystone-post.handler.mts +75 -0
- package/src/serve-gib/handlers/api/keystone/keystone-post.respec.mts +130 -0
- package/src/serve-gib/handlers/api/keystone/sso-config.handler.mts +66 -0
- package/src/serve-gib/handlers/api/keystone/sso-link.handler.mts +140 -0
- package/src/serve-gib/handlers/api/keystone/sso-login.handler.mts +190 -0
- package/src/serve-gib/handlers/error-handler.mts +36 -0
- package/src/serve-gib/handlers/handler-base.mts +383 -0
- package/src/serve-gib/handlers/static-handler.mts +83 -0
- package/src/serve-gib/handlers/ws/sync-upgrade-handler-base.mts +233 -0
- package/src/serve-gib/handlers/ws/sync-upgrade.handler.mts +24 -0
- package/src/serve-gib/handlers/ws/ws-helper.mts +216 -0
- package/src/serve-gib/handlers/ws/ws-types.mts +53 -0
- package/src/serve-gib/identity-index/identity-index-constants.mts +3 -0
- package/src/serve-gib/identity-index/identity-index-helpers.mts +85 -0
- package/src/serve-gib/identity-index/identity-index-service.mts +109 -0
- package/src/serve-gib/identity-index/identity-index-service.respec.mts +135 -0
- package/src/serve-gib/identity-index/identity-index-types.mts +33 -0
- package/src/serve-gib/index.mts +92 -0
- package/src/serve-gib/keystone-schema-helpers.mts +120 -0
- package/src/serve-gib/keystone-schema-helpers.respec.mts +85 -0
- package/src/serve-gib/metaspace-nodeindexedspace/metaspace-nodeindexedspace.mts +109 -0
- package/src/serve-gib/path-constants.mts +119 -0
- package/src/serve-gib/path-helper.mts +101 -0
- package/src/serve-gib/path-helper.respec.mts +99 -0
- package/src/serve-gib/serve-gib-helpers.mts +32 -0
- package/src/serve-gib/serve-gib-v1.mts +172 -0
- package/src/serve-gib/serve-gib.respec.mts +90 -0
- package/src/serve-gib/server-constants.mts +2 -0
- package/src/serve-gib/types.mts +102 -0
- package/src/witness/space/metaspace/metaspace-nodespace/metaspace-nodespace.mts +41 -0
- package/src/witness/space/node-filesystem-space/node-filesystem-space-helper.mts +1 -1
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { extractErrorMsg } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
|
|
2
|
+
import { validateIbGibAddr } from '@ibgib/ts-gib/dist/V1/validate-helper.mjs';
|
|
3
|
+
import { GLOBAL_LOG_A_LOT } from './server-constants.mjs';
|
|
4
|
+
import { FORBIDDEN_PATTERNS, MAX_PATH_LENGTH, VALID_STATIC_PATH_REGEX } from './path-constants.mjs';
|
|
5
|
+
const logalot = GLOBAL_LOG_A_LOT;
|
|
6
|
+
/**
|
|
7
|
+
* little helper function just to DRY out code.
|
|
8
|
+
*/
|
|
9
|
+
export function runtimeErrorValidationStrings(lc, error) {
|
|
10
|
+
const emsg = `${lc} ${extractErrorMsg(error)}`;
|
|
11
|
+
console.error(emsg);
|
|
12
|
+
return [`runtime error: ${emsg}`];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Validates that a path is safe from common attacks and under max length.
|
|
16
|
+
*/
|
|
17
|
+
export function validateRawPath(rawPath) {
|
|
18
|
+
const lc = `[${validateRawPath.name}]`;
|
|
19
|
+
try {
|
|
20
|
+
if (logalot) {
|
|
21
|
+
console.log(`${lc} starting... (I: 80bd6f63e6c83b8e943b90383e044826)`);
|
|
22
|
+
}
|
|
23
|
+
const errors = [];
|
|
24
|
+
if (!rawPath || rawPath.length > MAX_PATH_LENGTH) {
|
|
25
|
+
errors.push(`path too long. MAX_PATH_LENGTH: ${MAX_PATH_LENGTH}, incoming path length: ${rawPath.length}`);
|
|
26
|
+
}
|
|
27
|
+
for (const pattern of FORBIDDEN_PATTERNS) {
|
|
28
|
+
if (pattern.test(rawPath)) {
|
|
29
|
+
errors.push(`invalid path. contains forbidden pattern.source: ${pattern.source} (E: 56a228fb9473a086b83d0088b5af1826)`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return errors;
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
return runtimeErrorValidationStrings(lc, error);
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
if (logalot) {
|
|
39
|
+
console.log(`${lc} complete.`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* simple boolean wrapper for {@link validateRawPath}
|
|
45
|
+
*/
|
|
46
|
+
export function isSafePath(path) {
|
|
47
|
+
const errors = validateRawPath(path);
|
|
48
|
+
return errors.length === 0;
|
|
49
|
+
}
|
|
50
|
+
export function validateStaticPath(path) {
|
|
51
|
+
const lc = `[${validateStaticPath.name}]`;
|
|
52
|
+
try {
|
|
53
|
+
if (logalot) {
|
|
54
|
+
console.log(`${lc} starting... (I: 4f9cf8ffd528c7dd88324529528eeb26)`);
|
|
55
|
+
}
|
|
56
|
+
const errors = [];
|
|
57
|
+
if (!VALID_STATIC_PATH_REGEX.test(path)) {
|
|
58
|
+
errors.push(`static path fails to match VALID_STATIC_PATH_REGEX of ${VALID_STATIC_PATH_REGEX} (E: dfdf38a0439d4d09186e6fa81ab66826) `);
|
|
59
|
+
}
|
|
60
|
+
return errors;
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
return runtimeErrorValidationStrings(lc, error);
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
if (logalot) {
|
|
67
|
+
console.log(`${lc} complete.`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Validates a static file path.
|
|
73
|
+
*/
|
|
74
|
+
export function isValidStaticPath(path) {
|
|
75
|
+
if (!isSafePath(path)) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
const errors = validateStaticPath(path);
|
|
79
|
+
return errors.length === 0;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Decodes and validates a single ibGib address segment from a URL path.
|
|
83
|
+
* Uses the library's internal validateIbGibAddr for deep checking.
|
|
84
|
+
*/
|
|
85
|
+
export function validateAddressSegment(encodedAddr) {
|
|
86
|
+
const lc = `[${validateAddressSegment.name}]`;
|
|
87
|
+
try {
|
|
88
|
+
if (logalot) {
|
|
89
|
+
console.log(`${lc} starting... (I: 1bb9ff7e1aefb77b670b2519658cc126)`);
|
|
90
|
+
}
|
|
91
|
+
if (!encodedAddr) {
|
|
92
|
+
throw new Error(`(UNEXPECTED) falsy encodedAddr? We're expecting to have already guaranteed there are no double-slashes (i.e. no empty segments) (E: 7be7668e7b8c9fbbdf56f0fe19f92e26)`);
|
|
93
|
+
}
|
|
94
|
+
const addr = decodeURIComponent(encodedAddr);
|
|
95
|
+
const errors = validateIbGibAddr({ addr });
|
|
96
|
+
return errors ?? [];
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
return runtimeErrorValidationStrings(lc, error);
|
|
100
|
+
}
|
|
101
|
+
finally {
|
|
102
|
+
if (logalot) {
|
|
103
|
+
console.log(`${lc} complete.`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=path-helper.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-helper.mjs","sourceRoot":"","sources":["../../src/serve-gib/path-helper.mts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-helper.respec.d.mts","sourceRoot":"","sources":["../../src/serve-gib/path-helper.respec.mts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// import { respecfully, iReckon, ifWe } from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
|
|
2
|
+
// import {
|
|
3
|
+
// isSafePath, isValidStaticPath,
|
|
4
|
+
// // API_PATHS, getPathParams, MAX_PATH_LENGTH,
|
|
5
|
+
// validateAddressSegment
|
|
6
|
+
// } from './path-helper.mjs';
|
|
7
|
+
// import { MAX_PATH_LENGTH } from './path-constants.mts';
|
|
8
|
+
export {};
|
|
9
|
+
// const sir = `[${import.meta.url}]`;
|
|
10
|
+
// await respecfully(sir, 'Path Helper Validation', async () => {
|
|
11
|
+
// await respecfully(sir, 'isSafePath', async () => {
|
|
12
|
+
// await ifWe(sir, 'valid simple paths', async () => {
|
|
13
|
+
// iReckon(sir, isSafePath('/api/health')).isGonnaBeTrue();
|
|
14
|
+
// iReckon(sir, isSafePath('/index.html')).isGonnaBeTrue();
|
|
15
|
+
// });
|
|
16
|
+
// await ifWe(sir, 'too long paths', async () => {
|
|
17
|
+
// const longPath = '/'.repeat(MAX_PATH_LENGTH + 1);
|
|
18
|
+
// iReckon(sir, isSafePath(longPath)).isGonnaBeFalse();
|
|
19
|
+
// });
|
|
20
|
+
// await ifWe(sir, 'directory traversal attempts', async () => {
|
|
21
|
+
// iReckon(sir, isSafePath('/../etc/passwd')).isGonnaBeFalse();
|
|
22
|
+
// iReckon(sir, isSafePath('/api/../../etc/passwd')).isGonnaBeFalse();
|
|
23
|
+
// });
|
|
24
|
+
// await ifWe(sir, 'null bytes', async () => {
|
|
25
|
+
// iReckon(sir, isSafePath('/api/health\0')).isGonnaBeFalse();
|
|
26
|
+
// });
|
|
27
|
+
// await ifWe(sir, 'redundant slashes', async () => {
|
|
28
|
+
// iReckon(sir, isSafePath('/api//health')).isGonnaBeFalse();
|
|
29
|
+
// });
|
|
30
|
+
// await ifWe(sir, 'dot-file access', async () => {
|
|
31
|
+
// iReckon(sir, isSafePath('/.env')).isGonnaBeFalse();
|
|
32
|
+
// iReckon(sir, isSafePath('/scripts/.hidden')).isGonnaBeFalse();
|
|
33
|
+
// iReckon(sir, isSafePath('/.git/config')).isGonnaBeFalse();
|
|
34
|
+
// });
|
|
35
|
+
// });
|
|
36
|
+
// await respecfully(sir, 'validateAddressSegment', async () => {
|
|
37
|
+
// await ifWe(sir, 'valid encoded addresses', async () => {
|
|
38
|
+
// const validGib = 'a'.repeat(64);
|
|
39
|
+
// iReckon(sir, validateAddressSegment(`someib%5E${validGib}`)).isGonnaBeTrue();
|
|
40
|
+
// // gib with dots (common in sha256.sha256)
|
|
41
|
+
// const dotGib = `${validGib}.${validGib}`;
|
|
42
|
+
// iReckon(sir, validateAddressSegment(`someib%5E${dotGib}`)).isGonnaBeTrue();
|
|
43
|
+
// });
|
|
44
|
+
// await ifWe(sir, 'invalid encoded addresses', async () => {
|
|
45
|
+
// iReckon(sir, validateAddressSegment('no_delim')).isGonnaBeFalse();
|
|
46
|
+
// iReckon(sir, validateAddressSegment('%5Estarts_with_delim')).isGonnaBeFalse();
|
|
47
|
+
// iReckon(sir, validateAddressSegment('too%5Emany%5Edelims')).isGonnaBeFalse();
|
|
48
|
+
// iReckon(sir, validateAddressSegment('too%5Emany..dots')).isGonnaBeFalse();
|
|
49
|
+
// iReckon(sir, validateAddressSegment('invalid_chars_!%5Eabc')).isGonnaBeFalse();
|
|
50
|
+
// });
|
|
51
|
+
// });
|
|
52
|
+
// await respecfully(sir, 'API_PATHS Regexes', async () => {
|
|
53
|
+
// await ifWe(sir, 'HEALTH regex', async () => {
|
|
54
|
+
// iReckon(sir, API_PATHS.HEALTH.test('/api/health')).isGonnaBeTrue();
|
|
55
|
+
// iReckon(sir, API_PATHS.HEALTH.test('/api/health/')).isGonnaBeTrue();
|
|
56
|
+
// iReckon(sir, API_PATHS.HEALTH.test('/api/health/more')).isGonnaBeFalse();
|
|
57
|
+
// });
|
|
58
|
+
// await ifWe(sir, 'IBGIB_ADDR regex', async () => {
|
|
59
|
+
// // valid encoded addr: someib%5Esomegib
|
|
60
|
+
// const addr = '/api/ibgib/someib%5Esomegib';
|
|
61
|
+
// iReckon(sir, API_PATHS.IBGIB_ADDR.test(addr)).isGonnaBeTrue();
|
|
62
|
+
// const params = getPathParams(addr, API_PATHS.IBGIB_ADDR);
|
|
63
|
+
// iReckon(sir, params?.[0]).isGonnaBe('someib%5Esomegib');
|
|
64
|
+
// });
|
|
65
|
+
// await ifWe(sir, 'IBGIB_GRAPH regex', async () => {
|
|
66
|
+
// const path = '/api/ibgib/graph/someib%5Esomegib';
|
|
67
|
+
// iReckon(sir, API_PATHS.IBGIB_GRAPH.test(path)).isGonnaBeTrue();
|
|
68
|
+
// const params = getPathParams(path, API_PATHS.IBGIB_GRAPH);
|
|
69
|
+
// iReckon(sir, params?.[0]).isGonnaBe('someib%5Esomegib');
|
|
70
|
+
// });
|
|
71
|
+
// await ifWe(sir, 'KEYSTONE regex', async () => {
|
|
72
|
+
// iReckon(sir, API_PATHS.KEYSTONE.test('/api/keystone')).isGonnaBeTrue();
|
|
73
|
+
// iReckon(sir, API_PATHS.KEYSTONE.test('/api/keystone/')).isGonnaBeTrue();
|
|
74
|
+
// });
|
|
75
|
+
// await ifWe(sir, 'KEYSTONE_EVOLVE regex', async () => {
|
|
76
|
+
// const path = '/api/keystone/evolve/someib%5Esomegib';
|
|
77
|
+
// iReckon(sir, API_PATHS.KEYSTONE_EVOLVE.test(path)).isGonnaBeTrue();
|
|
78
|
+
// const params = getPathParams(path, API_PATHS.KEYSTONE_EVOLVE);
|
|
79
|
+
// iReckon(sir, params?.[0]).isGonnaBe('someib%5Esomegib');
|
|
80
|
+
// });
|
|
81
|
+
// });
|
|
82
|
+
// });
|
|
83
|
+
//# sourceMappingURL=path-helper.respec.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-helper.respec.mjs","sourceRoot":"","sources":["../../src/serve-gib/path-helper.respec.mts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,WAAW;AACX,qCAAqC;AACrC,oDAAoD;AACpD,6BAA6B;AAC7B,8BAA8B;AAC9B,0DAA0D;;AAE1D,sCAAsC;AAEtC,iEAAiE;AAEjE,yDAAyD;AACzD,8DAA8D;AAC9D,uEAAuE;AACvE,uEAAuE;AACvE,cAAc;AAEd,0DAA0D;AAC1D,gEAAgE;AAChE,mEAAmE;AACnE,cAAc;AAEd,wEAAwE;AACxE,2EAA2E;AAC3E,kFAAkF;AAClF,cAAc;AAEd,sDAAsD;AACtD,0EAA0E;AAC1E,cAAc;AAEd,6DAA6D;AAC7D,yEAAyE;AACzE,cAAc;AAEd,2DAA2D;AAC3D,kEAAkE;AAClE,6EAA6E;AAC7E,yEAAyE;AACzE,cAAc;AACd,UAAU;AAEV,qEAAqE;AACrE,mEAAmE;AACnE,+CAA+C;AAC/C,4FAA4F;AAC5F,yDAAyD;AACzD,wDAAwD;AACxD,0FAA0F;AAC1F,cAAc;AAEd,qEAAqE;AACrE,iFAAiF;AACjF,6FAA6F;AAC7F,4FAA4F;AAC5F,yFAAyF;AACzF,8FAA8F;AAC9F,cAAc;AACd,UAAU;AAEV,gEAAgE;AAChE,wDAAwD;AACxD,kFAAkF;AAClF,mFAAmF;AACnF,wFAAwF;AACxF,cAAc;AAEd,4DAA4D;AAC5D,sDAAsD;AACtD,0DAA0D;AAC1D,6EAA6E;AAE7E,wEAAwE;AACxE,uEAAuE;AACvE,cAAc;AAEd,6DAA6D;AAC7D,gEAAgE;AAChE,8EAA8E;AAE9E,yEAAyE;AACzE,uEAAuE;AACvE,cAAc;AAEd,0DAA0D;AAC1D,sFAAsF;AACtF,uFAAuF;AACvF,cAAc;AAEd,iEAAiE;AACjE,oEAAoE;AACpE,kFAAkF;AAElF,6EAA6E;AAC7E,uEAAuE;AACvE,cAAc;AACd,UAAU;AACV,MAAM"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module serve-gib/serve-gib-helpers
|
|
3
|
+
*
|
|
4
|
+
* General purpose helper functions for the serve-gib framework.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Validates and coerces a boolean query parameter in place on the queryParams object.
|
|
8
|
+
*
|
|
9
|
+
* @param queryParams The parsed query parameters object
|
|
10
|
+
* @param key The specific key to validate and coerce
|
|
11
|
+
* @param errors Array to push error messages into if validation fails
|
|
12
|
+
*/
|
|
13
|
+
export declare function validateAndCoerceBooleanQueryParam(queryParams: any, key: string, errors: string[]): void;
|
|
14
|
+
//# sourceMappingURL=serve-gib-helpers.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve-gib-helpers.d.mts","sourceRoot":"","sources":["../../src/serve-gib/serve-gib-helpers.mts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;GAMG;AACH,wBAAgB,kCAAkC,CAC9C,WAAW,EAAE,GAAG,EAChB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EAAE,GACjB,IAAI,CAcN"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module serve-gib/serve-gib-helpers
|
|
3
|
+
*
|
|
4
|
+
* General purpose helper functions for the serve-gib framework.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Validates and coerces a boolean query parameter in place on the queryParams object.
|
|
8
|
+
*
|
|
9
|
+
* @param queryParams The parsed query parameters object
|
|
10
|
+
* @param key The specific key to validate and coerce
|
|
11
|
+
* @param errors Array to push error messages into if validation fails
|
|
12
|
+
*/
|
|
13
|
+
export function validateAndCoerceBooleanQueryParam(queryParams, key, errors) {
|
|
14
|
+
const rawVal = queryParams[key];
|
|
15
|
+
if (typeof rawVal === 'string' &&
|
|
16
|
+
(rawVal.toLowerCase() === 'true' || rawVal.toLowerCase() === 'false')) {
|
|
17
|
+
queryParams[key] = rawVal.toLowerCase() === 'true';
|
|
18
|
+
}
|
|
19
|
+
else if (typeof rawVal === 'boolean') {
|
|
20
|
+
// do nothing, it's already a boolean
|
|
21
|
+
}
|
|
22
|
+
else if (rawVal !== undefined) {
|
|
23
|
+
errors.push(`invalid value for "${key}". typeof should either be string or boolean. (E: c28ef87a2d4b4a6faef9a2c8db05b637)`);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
// It's undefined, which means it wasn't provided in the URL.
|
|
27
|
+
// We do not error here because default parameters apply later or it may be optional.
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=serve-gib-helpers.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve-gib-helpers.mjs","sourceRoot":"","sources":["../../src/serve-gib/serve-gib-helpers.mts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,kCAAkC,CAC9C,WAAgB,EAChB,GAAW,EACX,MAAgB;IAEhB,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,OAAO,MAAM,KAAK,QAAQ;QAC1B,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,EACvE,CAAC;QACC,WAAW,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC;IACvD,CAAC;SAAM,IAAI,OAAO,MAAM,KAAK,SAAS,EAAE,CAAC;QACrC,qCAAqC;IACzC,CAAC;SAAM,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,sBAAsB,GAAG,qFAAqF,CAAC,CAAC;IAChI,CAAC;SAAM,CAAC;QACJ,6DAA6D;QAC7D,qFAAqF;IACzF,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module serve-gib/serve-gib-v1
|
|
3
|
+
*
|
|
4
|
+
* The main entry point for processing incoming requests in the serve-gib
|
|
5
|
+
* framework.
|
|
6
|
+
*/
|
|
7
|
+
import { IncomingMessage, ServerResponse } from 'node:http';
|
|
8
|
+
import { RequestContext, ServeGibHandler } from './types.mjs';
|
|
9
|
+
export interface ServeGibOptions {
|
|
10
|
+
/** Pipeline of handlers to check in order. */
|
|
11
|
+
handlers: ServeGibHandler<any, any>[];
|
|
12
|
+
/** Dedicated handler for errors (404, 500, etc.). */
|
|
13
|
+
errorHandler: ServeGibHandler<any, any>;
|
|
14
|
+
/** Port the server is listening on. */
|
|
15
|
+
port: number;
|
|
16
|
+
/**
|
|
17
|
+
* Root data directory for the server. We will use this as the root dir for
|
|
18
|
+
* all spaces that house multitenant ibgib data.
|
|
19
|
+
*/
|
|
20
|
+
dataDir: string;
|
|
21
|
+
}
|
|
22
|
+
export declare class ServeGib_V1 {
|
|
23
|
+
private options;
|
|
24
|
+
private lc;
|
|
25
|
+
constructor(options: ServeGibOptions);
|
|
26
|
+
/**
|
|
27
|
+
* Entry point for all incoming HTTP requests.
|
|
28
|
+
*/
|
|
29
|
+
handleRequest(req: IncomingMessage, res: ServerResponse): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Builds request context (e.g. extracting/decoding URL, path segments, body
|
|
32
|
+
* content, etc.), and initializes the request's metaspace if applicable.
|
|
33
|
+
*/
|
|
34
|
+
prepareContext(req: IncomingMessage): Promise<RequestContext>;
|
|
35
|
+
/** Reads the full request body as UTF-8. */
|
|
36
|
+
private readBody;
|
|
37
|
+
/** Sends the response result to the client. */
|
|
38
|
+
private sendResponse;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=serve-gib-v1.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve-gib-v1.d.mts","sourceRoot":"","sources":["../../src/serve-gib/serve-gib-v1.mts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAK5D,OAAO,EAAE,cAAc,EAAkB,eAAe,EAAsB,MAAM,aAAa,CAAC;AAIlG,MAAM,WAAW,eAAe;IAC5B,8CAA8C;IAC9C,QAAQ,EAAE,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IACtC,qDAAqD;IACrD,YAAY,EAAE,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxC,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,WAAW;IAGR,OAAO,CAAC,OAAO;IAF3B,OAAO,CAAC,EAAE,CAA2B;IAErC,YAAoB,OAAO,EAAE,eAAe,EAAK;IAEjD;;OAEG;IACG,aAAa,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAmD5E;IAED;;;OAGG;IACU,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAyCzE;IAED,4CAA4C;IAC5C,OAAO,CAAC,QAAQ;IAShB,+CAA+C;IAC/C,OAAO,CAAC,YAAY;CAsBvB"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module serve-gib/serve-gib-v1
|
|
3
|
+
*
|
|
4
|
+
* The main entry point for processing incoming requests in the serve-gib
|
|
5
|
+
* framework.
|
|
6
|
+
*/
|
|
7
|
+
import { extractErrorMsg } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
|
|
8
|
+
import { GLOBAL_LOG_A_LOT } from './constants.mjs';
|
|
9
|
+
const logalot = GLOBAL_LOG_A_LOT;
|
|
10
|
+
export class ServeGib_V1 {
|
|
11
|
+
options;
|
|
12
|
+
lc = `[${ServeGib_V1.name}]`;
|
|
13
|
+
constructor(options) {
|
|
14
|
+
this.options = options;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Entry point for all incoming HTTP requests.
|
|
18
|
+
*/
|
|
19
|
+
async handleRequest(req, res) {
|
|
20
|
+
const lc = `${this.lc}[${this.handleRequest.name}]`;
|
|
21
|
+
const start = Date.now();
|
|
22
|
+
let reqCtx;
|
|
23
|
+
try {
|
|
24
|
+
// Contextualize the request
|
|
25
|
+
reqCtx = await this.prepareContext(req);
|
|
26
|
+
if (!reqCtx) {
|
|
27
|
+
throw new Error(`(UNEXPECTED) reqCtx falsy? couldn't prepare context? (E: 401888c0f649dfdf0e2d21f86b3ff826)`);
|
|
28
|
+
}
|
|
29
|
+
// Execute pipeline
|
|
30
|
+
let result;
|
|
31
|
+
for (const handler of this.options.handlers) {
|
|
32
|
+
result = await handler.handleRoute(reqCtx);
|
|
33
|
+
if (result) {
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Fallback if no handler matched
|
|
38
|
+
if (!result) {
|
|
39
|
+
result = await this.options.errorHandler.handleRoute(reqCtx);
|
|
40
|
+
}
|
|
41
|
+
// Final output
|
|
42
|
+
if (result) {
|
|
43
|
+
this.sendResponse(res, result);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
// If even the error handler didn't produce a result
|
|
47
|
+
this.sendResponse(res, { status: 404, body: 'Not Found' });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
console.error(`${lc} Fatal error handling ${req.method} ${req.url}: ${extractErrorMsg(error)}`);
|
|
52
|
+
try {
|
|
53
|
+
// Try to use the error handler for the fatal error
|
|
54
|
+
if (reqCtx) {
|
|
55
|
+
const errorResult = await this.options.errorHandler.handleRoute(reqCtx);
|
|
56
|
+
this.sendResponse(res, errorResult ?? { status: 500, body: 'Internal Server Error' });
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
throw new Error(`errored before reqCtx could be set. (E: d77ab84b4f8874e188cfa8e9895f1226)`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch (innerError) {
|
|
63
|
+
// Total collapse fallback
|
|
64
|
+
console.error(`${lc} Collapse in error handler: ${extractErrorMsg(innerError)}`);
|
|
65
|
+
res.writeHead(500);
|
|
66
|
+
res.end('Critical Server Error');
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
const duration = Date.now() - start;
|
|
71
|
+
// Standard access logging
|
|
72
|
+
console.log(`${lc} ${req.method} ${req.url} -> ${res.statusCode} (${duration}ms)`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Builds request context (e.g. extracting/decoding URL, path segments, body
|
|
77
|
+
* content, etc.), and initializes the request's metaspace if applicable.
|
|
78
|
+
*/
|
|
79
|
+
async prepareContext(req) {
|
|
80
|
+
const lc = `${this.lc}[${this.prepareContext.name}]`;
|
|
81
|
+
try {
|
|
82
|
+
if (logalot) {
|
|
83
|
+
console.log(`${lc} starting... (I: ad9e9c678d0538c2d1e16ca8063d4426)`);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* These are NOT all of the validation we do on the context, rather,
|
|
87
|
+
* it is just simple initial validation.
|
|
88
|
+
*/
|
|
89
|
+
const initialValidationErrors = [];
|
|
90
|
+
const rawUrl = req.url ?? '/';
|
|
91
|
+
const protocol = req.headers['x-forwarded-proto'] || 'http'; // todo: who owns the req.headers? Can an attacker manipulate this?
|
|
92
|
+
const url = new URL(rawUrl, `${protocol}://localhost:${this.options.port}`); // todo: wth?? Why are we hard-coding localhost? in the URL object?
|
|
93
|
+
const pathname = url.pathname;
|
|
94
|
+
const rawPathSegments = pathname.split('/');
|
|
95
|
+
const decodedPathSegments = rawPathSegments.map(s => decodeURIComponent(s));
|
|
96
|
+
const body = await this.readBody(req);
|
|
97
|
+
const reqCtx = {
|
|
98
|
+
rawUrl,
|
|
99
|
+
pathname,
|
|
100
|
+
method: req.method?.toUpperCase() ?? 'GET',
|
|
101
|
+
protocol,
|
|
102
|
+
body,
|
|
103
|
+
rawPathSegments,
|
|
104
|
+
decodedPathSegments,
|
|
105
|
+
url,
|
|
106
|
+
dataDir: this.options.dataDir,
|
|
107
|
+
headers: req.headers,
|
|
108
|
+
};
|
|
109
|
+
return reqCtx;
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
console.error(`${lc} ${extractErrorMsg(error)}`);
|
|
113
|
+
throw error;
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
if (logalot) {
|
|
117
|
+
console.log(`${lc} complete.`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/** Reads the full request body as UTF-8. */
|
|
122
|
+
readBody(req) {
|
|
123
|
+
return new Promise((resolve, reject) => {
|
|
124
|
+
const chunks = [];
|
|
125
|
+
req.on('data', (chunk) => chunks.push(chunk));
|
|
126
|
+
req.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8')));
|
|
127
|
+
req.on('error', reject);
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
/** Sends the response result to the client. */
|
|
131
|
+
sendResponse(res, result) {
|
|
132
|
+
const lc = `${this.lc}[${this.sendResponse.name}]`;
|
|
133
|
+
try {
|
|
134
|
+
if (logalot) {
|
|
135
|
+
console.log(`${lc} starting... (I: 37369cf120c14780e8652bf27ada1726)`);
|
|
136
|
+
}
|
|
137
|
+
const { status, headers = {}, body, isJson = false } = result;
|
|
138
|
+
let payload = body;
|
|
139
|
+
if (isJson) {
|
|
140
|
+
headers['Content-Type'] = 'application/json; charset=utf-8';
|
|
141
|
+
payload = JSON.stringify(body);
|
|
142
|
+
}
|
|
143
|
+
res.writeHead(status, headers);
|
|
144
|
+
res.end(payload);
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
console.error(`${lc} ${extractErrorMsg(error)}`);
|
|
148
|
+
throw error;
|
|
149
|
+
}
|
|
150
|
+
finally {
|
|
151
|
+
if (logalot) {
|
|
152
|
+
console.log(`${lc} complete.`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=serve-gib-v1.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve-gib-v1.mjs","sourceRoot":"","sources":["../../src/serve-gib/serve-gib-v1.mts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve-gib.respec.d.mts","sourceRoot":"","sources":["../../src/serve-gib/serve-gib.respec.mts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { respecfully, iReckon, ifWe } from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
|
|
2
|
+
import { ServeGib_V1 } from './serve-gib-v1.mjs';
|
|
3
|
+
import { HealthHandler } from './handlers/api/health.handler.mjs';
|
|
4
|
+
import { ErrorHandler } from './handlers/error-handler.mjs';
|
|
5
|
+
const sir = `[${import.meta.url}]`;
|
|
6
|
+
await respecfully(sir, 'ServeGib ServeGib_V1', async () => {
|
|
7
|
+
await ifWe(sir, 'construct a RouteInfo object', async () => {
|
|
8
|
+
const serveGib = new ServeGib_V1({
|
|
9
|
+
port: 3000,
|
|
10
|
+
dataDir: './test-data',
|
|
11
|
+
handlers: [],
|
|
12
|
+
errorHandler: new ErrorHandler()
|
|
13
|
+
});
|
|
14
|
+
// Mock request
|
|
15
|
+
const req = {
|
|
16
|
+
url: '/api/health?foo=bar',
|
|
17
|
+
method: 'GET',
|
|
18
|
+
headers: { 'x-forwarded-proto': 'https' },
|
|
19
|
+
on: (event, cb) => {
|
|
20
|
+
if (event === 'end') {
|
|
21
|
+
cb();
|
|
22
|
+
}
|
|
23
|
+
} // immediate end for readBody
|
|
24
|
+
};
|
|
25
|
+
const info = await serveGib.prepareContext(req);
|
|
26
|
+
iReckon(sir, info.pathname).isGonnaBe('/api/health');
|
|
27
|
+
iReckon(sir, info.method).isGonnaBe('GET');
|
|
28
|
+
iReckon(sir, info.protocol).isGonnaBe('https');
|
|
29
|
+
iReckon(sir, info.decodedPathSegments).includes('api');
|
|
30
|
+
iReckon(sir, info.decodedPathSegments).includes('health');
|
|
31
|
+
});
|
|
32
|
+
await ifWe(sir, 'execute a handler in the pipeline', async () => {
|
|
33
|
+
const health = new HealthHandler();
|
|
34
|
+
const serveGib = new ServeGib_V1({
|
|
35
|
+
port: 3000,
|
|
36
|
+
dataDir: './test-data',
|
|
37
|
+
handlers: [health],
|
|
38
|
+
errorHandler: new ErrorHandler()
|
|
39
|
+
});
|
|
40
|
+
// Mock objects
|
|
41
|
+
const req = {
|
|
42
|
+
url: '/api/health',
|
|
43
|
+
method: 'GET',
|
|
44
|
+
headers: {},
|
|
45
|
+
on: (event, cb) => {
|
|
46
|
+
if (event === 'end') {
|
|
47
|
+
cb();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
const res = {
|
|
52
|
+
writeHead: () => { },
|
|
53
|
+
end: () => { },
|
|
54
|
+
statusCode: 200
|
|
55
|
+
};
|
|
56
|
+
await serveGib.handleRequest(req, res);
|
|
57
|
+
iReckon(sir, res.statusCode).isGonnaBe(200);
|
|
58
|
+
});
|
|
59
|
+
await ifWe(sir, 'fall back to error handler when no handler matches', async () => {
|
|
60
|
+
const serveGib = new ServeGib_V1({
|
|
61
|
+
port: 3000,
|
|
62
|
+
dataDir: './test-data',
|
|
63
|
+
handlers: [],
|
|
64
|
+
errorHandler: new ErrorHandler()
|
|
65
|
+
});
|
|
66
|
+
const req = {
|
|
67
|
+
url: '/not/found',
|
|
68
|
+
method: 'GET',
|
|
69
|
+
headers: {},
|
|
70
|
+
on: (event, cb) => {
|
|
71
|
+
if (event === 'end') {
|
|
72
|
+
cb();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
const res = {
|
|
77
|
+
writeHead: () => { },
|
|
78
|
+
end: () => { },
|
|
79
|
+
statusCode: 404
|
|
80
|
+
};
|
|
81
|
+
await serveGib.handleRequest(req, res);
|
|
82
|
+
iReckon(sir, res.statusCode).isGonnaBe(404);
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
//# sourceMappingURL=serve-gib.respec.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve-gib.respec.mjs","sourceRoot":"","sources":["../../src/serve-gib/serve-gib.respec.mts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-constants.d.mts","sourceRoot":"","sources":["../../src/serve-gib/server-constants.mts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AACtC,eAAO,MAAM,iBAAiB,6BAA6B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-constants.mjs","sourceRoot":"","sources":["../../src/serve-gib/server-constants.mts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AACtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,0BAA0B,CAAC"}
|