How to implement OpenZiti for Next.js app

Please see below regarding my current problems.

My code:

import next from 'next';
import ziti from '@openziti/ziti-sdk-nodejs';
import express from 'express';
import dotenv from 'dotenv';

dotenv.config();

const dev = process.env.NODE_ENV !== 'production';
const nextApp = next({ dev });
const handle = nextApp.getRequestHandler();

async function startServer() {
  try {
    console.log('Initializing OpenZiti...');
    const zitiIdentityFile = "/mnt/c/Users/user/Documents/c2c/openziti/wxxxxxxxsus.json";
    const zitiServiceName = 'hxxxxxu-dark-service';

    await ziti.init(zitiIdentityFile);
    console.log('OpenZiti initialized successfully');

    console.log('Creating Express server with OpenZiti...');
    // Create Ziti server with Express
    const zitiServer = ziti.express(express, zitiServiceName);

    console.log('Preparing Next.js app...');
    await nextApp.prepare();

    // Add routes after server creation
    zitiServer.all('*', (req, res) => {
      return handle(req, res);
    });

    console.log('Starting server...');
    zitiServer.listen(0, () => {
      console.log('> Ready on Ziti service:', zitiServiceName);
    });
  } catch (error) {
    console.error('Error details:', error);
    process.exit(1);
  }
}

startServer();

in a server.js file at project root that I created for the Next.js app so it uses this custom server with OpenZiti implemented. Right now I see

Starting server...
> Ready on Ziti service: openziti-dark-service
 ○ Compiling / ...
 ✓ Compiled / in 10.3s (602 modules)
 ✓ Compiled in 843ms (291 modules)
 GET / 200 in 11224ms
 GET / 200 in 75ms
 ⨯ uncaughtException: [TypeError: parser.onIncoming is not a function]
 ⨯ uncaughtException:  [TypeError: parser.onIncoming is not a function]
 ⨯ uncaughtException: [TypeError: parser.onIncoming is not a function]
 ⨯ uncaughtException:  [TypeError: parser.onIncoming is not a function]
 ⨯ unhandledRejection: [Error: This is caused by either a bug in Node.js or incorrect usage of Node.js internals.
Please open an issue with this stack trace at https://github.com/nodejs/node/issues
] {
  code: 'ERR_INTERNAL_ASSERTION'
}
 ⨯ unhandledRejection:  [Error: This is caused by either a bug in Node.js or incorrect usage of Node.js internals.
Please open an issue with this stack trace at https://github.com/nodejs/node/issues
] {
  code: 'ERR_INTERNAL_ASSERTION'
}
^C
(base) nyck33@DESKTOP-00H5JQP:/mnt/c/Users/user/Documents/c2c/learn-js/my-first-next$ 

I see my content on my mobile device I dial in from but the Chrome browser spinner on the tab keeps going and the bar that fills from left to right is stuck at about 10% of the way in to the middle which is strange.

reparing Next.js app...
(431409)[       19.108]   ERROR tlsuv:engine.c:1009 openssl read: error:0A000126:SSL routines::unexpected eof while reading
(431409)[       19.108]   ERROR ziti-sdk:channel.c:704 hello_reply_cb() ch[0] failed to receive Hello response due to -21(connection to edge router terminated)
Starting server...
> Ready on Ziti service: openziti-dark-service
 ○ Compiling / ...
 ✓ Compiled / in 10.5s (602 modules)
 GET / 200 in 11415ms
 ✓ Compiled in 864ms (291 modules)
 ⨯ uncaughtException: [TypeError: parser.onIncoming is not a function]
 ⨯ uncaughtException:  [TypeError: parser.onIncoming is not a function]

The page keeps loading but when I kill the server, I get the content showing on my mobile device's Chrome tab.

Hi @nyck33 Can you confirm which version of the Ziti NodeJS SDK you are using, which OS, and which architecture?

Also, please set the following env vars:

  • ZITI_NODEJS_LOG=999
  • ZITI_LOG=999

...and then re-run your flow, and show us the log trace.

Meanwhile, I will attempt to reproduce the error locally.

@curt, thanks for responding.

base) nyck33@DESKTOP-00H5JQP:/mnt/c/Users/user/Documents/c2c/openziti/my-first-next$ # Next.js version
npm list next

# OS and Architecture
node -e "console.log('OS:', process.platform, '\nArchitecture:', process.arch)"
my-first-next@1.0.0 /mnt/c/Users/user/Documents/c2c/openziti/my-first-next
└── next@15.1.4

OS: linux 
Architecture: x64

(base) nyck33@DESKTOP-00H5JQP:/mnt/c/Users/user/Documents/c2c/openziti/my-first-next$ npm list @openziti/ziti-sdk-nodejs
my-first-next@1.0.0 /mnt/c/Users/user/Documents/c2c/openziti/my-first-next
└── @openziti/ziti-sdk-nodejs@0.18.0

I will try using

ZITI_NODEJS_LOG=999
ZITI_LOG=999

I have some output:

(base) nyck33@DESKTOP-00H5JQP:/mnt/c/Users/user/Documents/c2c/openziti/my-first-next$ npm run dev

> my-first-next@1.0.0 dev
> node server.js

Preparing Next.js app...
Initializing OpenZiti...
(464579)[        0.000]    INFO ziti-sdk:utils.c:198 ziti_log_set_level() set log level: root=6/TRACE
(464579)[        0.000]    INFO ziti-sdk:utils.c:167 ziti_log_init() Ziti C SDK version 1.3.5 @gcd0b42b(HEAD) starting at (2025-01-14T02:30:53.482)
(464579)[        0.007]    INFO ziti-sdk:ziti.c:505 ziti_start_internal() ztx[0] enabling Ziti Context
(464579)[        0.007]    INFO ziti-sdk:ziti.c:522 ziti_start_internal() ztx[0] using tlsuv[v0.33.2/OpenSSL 3.0.15+quic 3 Sep 2024]
(464579)[        0.007]    INFO ziti-sdk:ziti_ctrl.c:632 ziti_ctrl_init() ctrl[(null):] using https://11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443/edge/client/v1
(464579)[        0.007]   DEBUG ziti-sdk:ziti_ctrl.c:646 ziti_ctrl_init() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] ziti controller client initialized
(464579)[        0.007] VERBOSE ziti-sdk:ziti_ctrl.c:152 start_request() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] starting GET[/version]
(464579)[        0.007]    INFO ziti-sdk:ziti.c:600 ztx_init_controller() ztx[0] Loading ziti context with controller[https://11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443/edge/client/v1]
(464579)[        0.007]   DEBUG ziti-sdk:ziti.c:531 ziti_start_internal() ztx[0] using metrics interval: 6
(464579)[        0.007]   DEBUG ziti-sdk:ziti.c:218 ziti_set_unauthenticated() ztx[0] setting auth_state[0] to 0
(464579)[        0.007]   DEBUG ziti-sdk:ziti_ctrl.c:386 ziti_ctrl_clear_api_session() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] clearing api session token for ziti_controller
(464579)[        0.007]   DEBUG ziti-sdk:ziti_ctrl.c:1071 ctrl_paging_req() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] starting paging request GET[/external-jwt-signers]
(464579)[        0.007] VERBOSE ziti-sdk:ziti_ctrl.c:1076 ctrl_paging_req() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] requesting /external-jwt-signers?limit=25&offset=0
(464579)[        0.007] VERBOSE ziti-sdk:ziti_ctrl.c:152 start_request() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] starting GET[/external-jwt-signers?limit=25&offset=0]
(464579)[        0.705] VERBOSE ziti-sdk:ziti_ctrl.c:207 ctrl_resp_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] received headers GET[/version]
(464579)[        0.705]   DEBUG ziti-sdk:ziti_ctrl.c:505 ctrl_body_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] completed GET[/version] in 0.695 s
(464579)[        0.705]    INFO ziti-sdk:ziti.c:1912 version_pre_auth_cb() ztx[0] connected to Legacy controller https://11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443/edge/client/v1 version v1.1.15(0eec47ce3c80 2024-10-02T12:59:41Z)
(464579)[        0.706] VERBOSE ziti-sdk:ziti_ctrl.c:152 start_request() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] starting POST[/authenticate?method=cert]
(464579)[        0.909] VERBOSE ziti-sdk:ziti_ctrl.c:207 ctrl_resp_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] received headers GET[/external-jwt-signers?limit=25&offset=0]
(464579)[        0.909]   DEBUG ziti-sdk:ziti_ctrl.c:490 ctrl_body_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] received 0/0 for paging request GET[/external-jwt-signers]
(464579)[        0.909]   DEBUG ziti-sdk:ziti_ctrl.c:500 ctrl_body_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] completed paging request GET[/external-jwt-signers] in 0.899 s
(464579)[        0.909]   DEBUG ziti-sdk:ziti.c:661 ext_jwt_singers_cb() ztx[0] 0 external auth providers available
(464579)[        1.117] VERBOSE ziti-sdk:ziti_ctrl.c:207 ctrl_resp_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] received headers POST[/authenticate?method=cert]
(464579)[        1.117]   DEBUG ziti-sdk:ziti_ctrl.c:505 ctrl_body_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] completed POST[/authenticate?method=cert] in 0.411 s
(464579)[        1.117]   DEBUG ziti-sdk:ziti_ctrl.c:400 ctrl_login_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] authenticated successfully session[cm5vuvztq2at2lsqr51rjnxqq]
(464579)[        1.117]   DEBUG ziti-sdk:legacy_auth.c:171 login_cb() logged in successfully => api_session[cm5vuvztq2at2lsqr51rjnxqq]
(464579)[        1.117]   DEBUG ziti-sdk:ziti.c:358 ziti_set_fully_authenticated() ztx[0] setting auth_state[0] to 3
(464579)[        1.117] VERBOSE ziti-sdk:ziti_ctrl.c:152 start_request() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] starting GET[/.well-known/est/cacerts]
(464579)[        1.117] VERBOSE ziti-sdk:ziti_ctrl.c:152 start_request() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] starting GET[/current-identity]
(464579)[        1.117] VERBOSE ziti-sdk:ziti.c:1420 ziti_services_refresh() ztx[0] forcing service refresh
(464579)[        1.117]   TRACE ziti-sdk:legacy_auth.c:263 refresh_delay() API supports cached_last_activity_at
(464579)[        1.117]   DEBUG ziti-sdk:legacy_auth.c:293 refresh_delay() api session set, next refresh in 1740s
(464579)[        1.117] VERBOSE ziti-sdk:ziti_ctrl.c:152 start_request() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] starting GET[/current-identity]
(464579)[        1.117]   DEBUG ziti-sdk:ziti_ctrl.c:1071 ctrl_paging_req() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] starting paging request GET[/current-identity/edge-routers]
(464579)[        1.117] VERBOSE ziti-sdk:ziti_ctrl.c:1076 ctrl_paging_req() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] requesting /current-identity/edge-routers?limit=25&offset=0
(464579)[        1.117] VERBOSE ziti-sdk:ziti_ctrl.c:152 start_request() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] starting GET[/current-identity/edge-routers?limit=25&offset=0]
(464579)[        1.117] VERBOSE ziti-sdk:ziti_ctrl.c:152 start_request() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] starting GET[/current-api-session/service-updates]
(464579)[        1.322] VERBOSE ziti-sdk:ziti_ctrl.c:207 ctrl_resp_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] received headers GET[/.well-known/est/cacerts]
(464579)[        1.530] VERBOSE ziti-sdk:ziti_ctrl.c:207 ctrl_resp_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] received headers GET[/current-identity]
(464579)[        1.530]   DEBUG ziti-sdk:ziti_ctrl.c:505 ctrl_body_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] completed GET[/current-identity] in 0.413 s
(464579)[        1.734] VERBOSE ziti-sdk:ziti_ctrl.c:207 ctrl_resp_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] received headers GET[/current-identity]
(464579)[        1.734]   DEBUG ziti-sdk:ziti_ctrl.c:505 ctrl_body_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] completed GET[/current-identity] in 0.617 s
(464579)[        1.940] VERBOSE ziti-sdk:ziti_ctrl.c:207 ctrl_resp_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] received headers GET[/current-identity/edge-routers?limit=25&offset=0]
(464579)[        1.940]   DEBUG ziti-sdk:ziti_ctrl.c:490 ctrl_body_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] received 1/1 for paging request GET[/current-identity/edge-routers]
(464579)[        1.940]   DEBUG ziti-sdk:ziti_ctrl.c:500 ctrl_body_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] completed paging request GET[/current-identity/edge-routers] in 0.822 s
(464579)[        1.940]   TRACE ziti-sdk:ziti.c:1466 edge_routers_cb() ztx[0] connecting to AWS us-east-1 Edge Router 1(tls://1a4fc3c8-5ada-4c21-a72a-31808dd1a7b5.production.netfoundry.io:443)
(464579)[        1.940]    INFO ziti-sdk:channel.c:272 new_ziti_channel() ch[0] (AWS us-east-1 Edge Router 1) new channel for ztx[0] identity[node-server]
(464579)[        1.940]    INFO ziti-sdk:channel.c:814 reconnect_channel() ch[0] reconnecting NOW
(464579)[        1.940]   DEBUG ziti-sdk:channel.c:780 reconnect_cb() ch[0] connecting to tls://1a4fc3c8-5ada-4c21-a72a-31808dd1a7b5.production.netfoundry.io:443
(464579)[        2.118] VERBOSE ziti-sdk:posture.c:196 ziti_send_posture_data() ztx[0] starting to send posture data
(464579)[        2.118]    INFO ziti-sdk:posture.c:206 ziti_send_posture_data() ztx[0] first run or potential controller restart detected
(464579)[        2.118]   DEBUG ziti-sdk:posture.c:210 ziti_send_posture_data() ztx[0] posture checks must_send set to TRUE, new_session_id[TRUE], must_send_every_time[TRUE], new_controller_instance[TRUE]
(464579)[        2.118] VERBOSE ziti-sdk:posture.c:238 ziti_send_posture_data() ztx[0] checking posture queries on 0 service(s)
(464579)[        2.118] VERBOSE ziti-sdk:posture.c:536 ziti_pr_send_bulk() ztx[0] no change in posture data, not sending
(464579)[        2.145] VERBOSE ziti-sdk:ziti_ctrl.c:207 ctrl_resp_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] received headers GET[/current-api-session/service-updates]
(464579)[        2.145]   DEBUG ziti-sdk:ziti_ctrl.c:505 ctrl_body_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] completed GET[/current-api-session/service-updates] in 1.028 s
(464579)[        2.145] VERBOSE ziti-sdk:ziti.c:1390 check_service_update() ztx[0] ztx last_update = 2025-01-13T12:47:59.572Z
(464579)[        2.145]   DEBUG ziti-sdk:ziti_ctrl.c:1071 ctrl_paging_req() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] starting paging request GET[/services?configTypes=all]
(464579)[        2.145] VERBOSE ziti-sdk:ziti_ctrl.c:1076 ctrl_paging_req() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] requesting /services?configTypes=all&limit=25&offset=0
(464579)[        2.145] VERBOSE ziti-sdk:ziti_ctrl.c:152 start_request() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] starting GET[/services?configTypes=all&limit=25&offset=0]
(464579)[        2.350] VERBOSE ziti-sdk:ziti_ctrl.c:207 ctrl_resp_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] received headers GET[/services?configTypes=all&limit=25&offset=0]
(464579)[        2.350]   DEBUG ziti-sdk:ziti_ctrl.c:490 ctrl_body_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] received 1/1 for paging request GET[/services?configTypes=all]
(464579)[        2.350]   DEBUG ziti-sdk:ziti_ctrl.c:500 ctrl_body_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] completed paging request GET[/services?configTypes=all] in 0.204 s
(464579)[        2.350] VERBOSE ziti-sdk:ziti.c:1422 ziti_services_refresh() ztx[0] scheduling service refresh 60 seconds from now
(464579)[        2.350] VERBOSE ziti-sdk:ziti.c:1260 update_services() ztx[0] processing service updates
(464579)[        2.350]   DEBUG ziti-sdk:ziti.c:1337 update_services() ztx[0] sending service event initial[true] 1 added, 0 removed, 0 changed
OpenZiti initialized successfully
Creating Express server with OpenZiti...
Starting server...
(464579)[        2.350] VERBOSE ziti-sdk:ziti_ctrl.c:152 start_request() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] starting GET[/services/2SmSHA58oEUZM3alZT768X/edge-routers]
(464579)[        2.350] VERBOSE ziti-sdk:ziti_ctrl.c:152 start_request() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] starting POST[/sessions]
(464579)[        2.401]   DEBUG ziti-sdk:channel.c:949 on_tls_connect() ch[0] connected alpn[ziti-edge]
(464579)[        2.401]   TRACE ziti-sdk:channel.c:415 ziti_channel_send_message() ch[0] => ct[0000] seq[1] len[29]
(464579)[        2.401]   TRACE ziti-sdk:channel.c:385 on_channel_send() ch[0] write delay = 0.000d q=1 qs=102
(464579)[        2.406]   TRACE ziti-sdk:channel.c:915 on_channel_data() ch[0] read no data
(464579)[        2.558] VERBOSE ziti-sdk:ziti_ctrl.c:207 ctrl_resp_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] received headers GET[/services/2SmSHA58oEUZM3alZT768X/edge-routers]
(464579)[        2.558]   DEBUG ziti-sdk:ziti_ctrl.c:505 ctrl_body_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] completed GET[/services/2SmSHA58oEUZM3alZT768X/edge-routers] in 0.204 s
(464579)[        2.558]   DEBUG ziti-sdk:bind.c:271 list_routers_cb() server[0.0](openziti-dark-service) AWS us-east-1 Edge Router 1/tls://1a4fc3c8-5ada-4c21-a72a-31808dd1a7b5.production.netfoundry.io:443
(464579)[        2.616]   TRACE ziti-sdk:channel.c:915 on_channel_data() ch[0] read no data
(464579)[        2.766] VERBOSE ziti-sdk:ziti_ctrl.c:207 ctrl_resp_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] received headers POST[/sessions]
(464579)[        2.766]   DEBUG ziti-sdk:ziti_ctrl.c:505 ctrl_body_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] completed POST[/sessions] in 0.412 s
(464579)[        2.766]   DEBUG ziti-sdk:bind.c:138 process_bindings() server[0.0](openziti-dark-service) checking router[AWS us-east-1 Edge Router 1]
(464579)[        2.766]   DEBUG ziti-sdk:bind.c:141 process_bindings() server[0.0](openziti-dark-service) router[AWS us-east-1 Edge Router 1] is not connected
> Ready on Ziti service: openziti-dark-service
(464579)[        2.822]   TRACE ziti-sdk:channel.c:920 on_channel_data() ch[0] on_data [len=141]
(464579)[        2.822]   TRACE ziti-sdk:channel.c:590 process_inbound() ch[0] <= ct[0002] seq[-1] len[0] hdrs[121]
(464579)[        2.822]   TRACE ziti-sdk:channel.c:601 process_inbound() ch[0] completing msg seq[-1] body+hrds=0+121, in_offset=0, want=121, got=121
(464579)[        2.822]   TRACE ziti-sdk:channel.c:615 process_inbound() ch[0] message is complete seq[-1] ct[0002]
(464579)[        2.822]    INFO ziti-sdk:channel.c:712 hello_reply_cb() ch[0] connected. EdgeRouter version: v1.1.15|0eec47ce3c80|2024-10-02T12:59:41Z|linux|amd64
(464579)[        2.822]   DEBUG ziti-sdk:bind.c:138 process_bindings() server[0.0](openziti-dark-service) checking router[AWS us-east-1 Edge Router 1]
(464579)[        2.822]   DEBUG ziti-sdk:bind.c:529 start_binding() server[0.0](openziti-dark-service) requesting BIND on ch[AWS us-east-1 Edge Router 1]
(464579)[        2.822]   TRACE ziti-sdk:bind.c:530 start_binding() server[0.0](openziti-dark-service) ch[0] => Edge Bind request token[d61d5560-80ac-476d-9552-79e0a819c115]
(464579)[        2.822]   TRACE ziti-sdk:channel.c:415 ziti_channel_send_message() ch[0] => ct[ED76] seq[2] len[36]
(464579)[        2.822]   TRACE ziti-sdk:channel.c:385 on_channel_send() ch[0] write delay = 0.000d q=1 qs=169
(464579)[        2.822]   DEBUG ziti-sdk:bind.c:173 update_bindings() server[0.0](openziti-dark-service) bindings: active[1] target[1]
(464579)[        2.822]   TRACE ziti-sdk:channel.c:915 on_channel_data() ch[0] read no data
(464579)[        3.031]   TRACE ziti-sdk:channel.c:920 on_channel_data() ch[0] on_data [len=56]
(464579)[        3.031]   TRACE ziti-sdk:channel.c:590 process_inbound() ch[0] <= ct[ED70] seq[1] len[0] hdrs[36]
(464579)[        3.031]   TRACE ziti-sdk:channel.c:601 process_inbound() ch[0] completing msg seq[1] body+hrds=0+36, in_offset=0, want=36, got=36
(464579)[        3.031]   TRACE ziti-sdk:channel.c:615 process_inbound() ch[0] message is complete seq[1] ct[ED70]
(464579)[        3.031]   TRACE ziti-sdk:bind.c:501 bind_reply_cb() server[0.0](openziti-dark-service) received msg ct[ED70] code[0]
(464579)[        3.031]   DEBUG ziti-sdk:bind.c:502 bind_reply_cb() server[0.0](openziti-dark-service) bound successfully on router[AWS us-east-1 Edge Router 1]
(464579)[        3.031]   DEBUG ziti-sdk:channel.c:244 ziti_channel_add_receiver() ch[0] added receiver[0]
(464579)[        3.031]   TRACE ziti-sdk:channel.c:915 on_channel_data() ch[0] read no data
(464579)[       22.118] VERBOSE ziti-sdk:posture.c:196 ziti_send_posture_data() ztx[0] starting to send posture data
(464579)[       22.118]   DEBUG ziti-sdk:posture.c:210 ziti_send_posture_data() ztx[0] posture checks must_send set to TRUE, new_session_id[FALSE], must_send_every_time[TRUE], new_controller_instance[FALSE]
(464579)[       22.118] VERBOSE ziti-sdk:posture.c:238 ziti_send_posture_data() ztx[0] checking posture queries on 1 service(s)
(464579)[       22.118] VERBOSE ziti-sdk:posture.c:536 ziti_pr_send_bulk() ztx[0] no change in posture data, not sending
(464579)[       36.186]   TRACE ziti-sdk:channel.c:920 on_channel_data() ch[0] on_data [len=32]
(464579)[       36.186]   TRACE ziti-sdk:channel.c:590 process_inbound() ch[0] <= ct[ED7E] seq[2] len[0] hdrs[12]
(464579)[       36.186]   TRACE ziti-sdk:channel.c:601 process_inbound() ch[0] completing msg seq[2] body+hrds=0+12, in_offset=0, want=12, got=12
(464579)[       36.186]   TRACE ziti-sdk:channel.c:615 process_inbound() ch[0] message is complete seq[2] ct[ED7E]
(464579)[       36.186]   DEBUG ziti-sdk:bind.c:473 on_message() received msg ct[ed7e] code[0] from AWS us-east-1 Edge Router 1
(464579)[       36.186]   DEBUG ziti-sdk:bind.c:401 process_inspect() server[0.0](openziti-dark-service) processing inspect: id[0] serviceName[openziti-dark-service] listenerId[vAuoeWKZqCkKEIRW0sLikvYEey-ajbu6dPkw3_ex5R0=] closed[N] encrypted[Y]
(464579)[       36.186]   TRACE ziti-sdk:channel.c:415 ziti_channel_send_message() ch[0] => ct[ED7F] seq[3] len[120]
(464579)[       36.186]   TRACE ziti-sdk:channel.c:385 on_channel_send() ch[0] write delay = 0.000d q=1 qs=173
(464579)[       36.186]   TRACE ziti-sdk:channel.c:915 on_channel_data() ch[0] read no data
(464579)[       42.121] VERBOSE ziti-sdk:posture.c:196 ziti_send_posture_data() ztx[0] starting to send posture data
(464579)[       42.121]   DEBUG ziti-sdk:posture.c:210 ziti_send_posture_data() ztx[0] posture checks must_send set to TRUE, new_session_id[FALSE], must_send_every_time[TRUE], new_controller_instance[FALSE]
(464579)[       42.121] VERBOSE ziti-sdk:posture.c:238 ziti_send_posture_data() ztx[0] checking posture queries on 1 service(s)
(464579)[       42.121] VERBOSE ziti-sdk:posture.c:536 ziti_pr_send_bulk() ztx[0] no change in posture data, not sending
(464579)[       62.125] VERBOSE ziti-sdk:posture.c:196 ziti_send_posture_data() ztx[0] starting to send posture data
(464579)[       62.125]   DEBUG ziti-sdk:posture.c:210 ziti_send_posture_data() ztx[0] posture checks must_send set to TRUE, new_session_id[FALSE], must_send_every_time[TRUE], new_controller_instance[FALSE]
(464579)[       62.125] VERBOSE ziti-sdk:posture.c:238 ziti_send_posture_data() ztx[0] checking posture queries on 1 service(s)
(464579)[       62.125] VERBOSE ziti-sdk:posture.c:536 ziti_pr_send_bulk() ztx[0] no change in posture data, not sending
(464579)[       62.350] VERBOSE ziti-sdk:ziti_ctrl.c:152 start_request() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] starting GET[/current-identity]
(464579)[       62.350]   DEBUG ziti-sdk:ziti_ctrl.c:1071 ctrl_paging_req() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] starting paging request GET[/current-identity/edge-routers]
(464579)[       62.350] VERBOSE ziti-sdk:ziti_ctrl.c:1076 ctrl_paging_req() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] requesting /current-identity/edge-routers?limit=25&offset=0
(464579)[       62.350] VERBOSE ziti-sdk:ziti_ctrl.c:152 start_request() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] starting GET[/current-identity/edge-routers?limit=25&offset=0]
(464579)[       62.350] VERBOSE ziti-sdk:ziti_ctrl.c:152 start_request() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] starting GET[/current-api-session/service-updates]
(464579)[       62.822]   TRACE ziti-sdk:channel.c:415 ziti_channel_send_message() ch[0] => ct[0003] seq[4] len[0]
(464579)[       62.822]   TRACE ziti-sdk:channel.c:385 on_channel_send() ch[0] write delay = 0.000d q=1 qs=36
(464579)[       63.003] VERBOSE ziti-sdk:ziti_ctrl.c:207 ctrl_resp_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] received headers GET[/current-identity]
(464579)[       63.003]   DEBUG ziti-sdk:ziti_ctrl.c:505 ctrl_body_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] completed GET[/current-identity] in 0.653 s
(464579)[       63.028]   TRACE ziti-sdk:channel.c:920 on_channel_data() ch[0] on_data [len=57]
(464579)[       63.028]   TRACE ziti-sdk:channel.c:590 process_inbound() ch[0] <= ct[0002] seq[3] len[0] hdrs[37]
(464579)[       63.028]   TRACE ziti-sdk:channel.c:601 process_inbound() ch[0] completing msg seq[3] body+hrds=0+37, in_offset=0, want=37, got=37
(464579)[       63.028]   TRACE ziti-sdk:channel.c:615 process_inbound() ch[0] message is complete seq[3] ct[0002]
(464579)[       63.028] VERBOSE ziti-sdk:channel.c:650 latency_reply_cb() ch[0] latency is now 206
(464579)[       63.028]   TRACE ziti-sdk:channel.c:915 on_channel_data() ch[0] read no data
(464579)[       63.243] VERBOSE ziti-sdk:ziti_ctrl.c:207 ctrl_resp_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] received headers GET[/current-identity/edge-routers?limit=25&offset=0]
(464579)[       63.243]   DEBUG ziti-sdk:ziti_ctrl.c:490 ctrl_body_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] received 1/1 for paging request GET[/current-identity/edge-routers]
(464579)[       63.243]   DEBUG ziti-sdk:ziti_ctrl.c:500 ctrl_body_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] completed paging request GET[/current-identity/edge-routers] in 0.893 s
(464579)[       63.445] VERBOSE ziti-sdk:ziti_ctrl.c:207 ctrl_resp_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] received headers GET[/current-api-session/service-updates]
(464579)[       63.445]   DEBUG ziti-sdk:ziti_ctrl.c:505 ctrl_body_cb() ctrl[11c1453a-8f7c-4d6e-9fc3-1a9c7c251c17.production.netfoundry.io:443] completed GET[/current-api-session/service-updates] in 1.094 s
(464579)[       63.445] VERBOSE ziti-sdk:ziti.c:1396 check_service_update() ztx[0] not updating: last_update is same previous (2025-01-13T12:47:59.572Z == 2025-01-13T12:47:59.572Z)
(464579)[       63.445] VERBOSE ziti-sdk:ziti.c:1422 ziti_services_refresh() ztx[0] scheduling service refresh 60 seconds from now
(464579)[       82.125] VERBOSE ziti-sdk:posture.c:196 ziti_send_posture_data() ztx[0] starting to send posture data
(464579)[       82.125]   DEBUG ziti-sdk:posture.c:210 ziti_send_posture_data() ztx[0] posture checks must_send set to TRUE, new_session_id[FALSE], must_send_every_time[TRUE], new_controller_instance[FALSE]
(464579)[       82.125] VERBOSE ziti-sdk:posture.c:238 ziti_send_posture_data() ztx[0] checking posture queries on 1 service(s)
(464579)[       82.125] VERBOSE ziti-sdk:posture.c:536 ziti_pr_send_bulk() ztx[0] no change in posture data, not sending

@curt logs available here: https://drive.google.com/drive/folders/1Jr8IdhxGcL9PsGThDiF00gef1Gqnlr-C?usp=sharing

@curt also these kinds of errors:

TypeError: parser.onIncoming is not a function
    at HTTPParser.parserOnHeadersComplete (node:_http_common:117:17)

This error is coming from the Ziti SDK's HTTP parser integration with Node.js. The specific error:
This suggests there's an incompatibility between how the Ziti SDK is handling HTTP requests and how Node.js expects them to be handled. The error occurs in the socket handling layer when Ziti tries to process incoming HTTP requests....is what Cursor AI says

The code:

import express from 'express';
import next from 'next';
import { parse } from 'url';
import { initializeZiti, getZitiExpressWrapper } from './src/lib/ziti/config';
import type { Request, Response } from 'express';
import type { NextApiRequest } from 'next';

const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();

async function main() {
  try {
    // Initialize Next.js first
    await app.prepare();
    
    const identityFile = process.env.ZITI_IDENTITY_FILE || '/mnt/c/Users/user/Documents/c2c/openziti/node-server.json';
    const serviceName = process.env.ZITI_SERVICE_NAME || 'openziti-dark-service';
    
    // Initialize Ziti
    const zitiInitialized = await initializeZiti({
      serviceConfig: {
        name: serviceName,
        identityFile
      }
    });
    
    if (!zitiInitialized) {
      throw new Error('Failed to initialize Ziti');
    }

    // Create Express app first
    const expressApp = express();
    
    // Add basic middleware
    expressApp.use(express.json());
    expressApp.use(express.urlencoded({ extended: true }));
    
    // Handle root path explicitly
    expressApp.get('/', async (req: Request, res: Response) => {
      try {
        const query = (req as unknown as NextApiRequest).query;
        await app.render(req, res, '/', query);
      } catch (err) {
        console.error('Error rendering root path:', err);
        res.status(500).send('Internal Server Error');
      }
    });
    
    // Handle all other routes
    expressApp.all('*', async (req: Request, res: Response) => {
      try {
        const parsedUrl = parse(req.url!, true);
        await handle(req, res, parsedUrl);
      } catch (err) {
        console.error('Error occurred handling', req.url, err);
        res.status(500).send('Internal Server Error');
      }
    });

    // Create Ziti-wrapped Express app
    const server = getZitiExpressWrapper(expressApp, serviceName);
    
    // Start listening
    server.listen(3000, (err?: Error) => {
      if (err) throw err;
      console.log(`> Ready on Ziti service: ${serviceName}`);
    });
    
    // Add error handler for the server
    server.on('error', (err: Error) => {
      console.error('Server error:', err);
      process.exit(1);
    });

  } catch (err) {
    console.error(err);
    process.exit(1);
  }
}

main();
//server.ts

config.ts

import ziti from '@openziti/ziti-sdk-nodejs';
import express, { Express } from 'express';
import type { Server } from 'http';

export interface ZitiConfig {
  serviceConfig: {
    name: string;
    identityFile: string;
  };
}

export const initializeZiti = async (config: ZitiConfig) => {
  try {
    await ziti.init(config.serviceConfig.identityFile);
    console.log('Ziti initialized successfully');
    return true;
  } catch (error) {
    console.error('Failed to initialize Ziti:', error);
    return false;
  }
};

export const getZitiExpressWrapper = (_expressApp: Express, serviceName: string): Server => {
  // Create a Ziti-wrapped Express app
  const app = ziti.express(express, serviceName);
  
  // Add error handler
  app.on('error', (err: Error) => {
    console.error('Ziti server error:', err);
  });
  
  return app;
};

@curt hello is there an update on this

Hi @nyck33 I have been working on a couple of other issues the last two days and haven't gotten to this issue yet. The good news is that the other two issues have just been confirmed as resolved, so I'll be able to investigate this issue tomorrow (Friday). I appreciate your patience.

1 Like

Hello how's it going @curt?

Hi Nobutaka. Your issue (one of many I am juggling) is still being worked on. I will be in touch as soon as I have news.

@nobutaka I just released v0.19.0 of the ziti-sdk-nodejs. This release entails only an upgrade of the embedded ziti-sdk-c which had some recent fixes which we believe are related to the issues you encountered.

Please upgrade to v0.19.0 and let us know if things have improved for you.

@nyck33 Has 0.19.0 resolved your issue?