@crossdelta/cloudevents 0.6.5 → 0.6.8

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/bin/cli.js CHANGED
@@ -4,7 +4,7 @@ import * as fs from 'fs';
4
4
  import { existsSync, readdirSync, statSync } from 'fs';
5
5
  import * as path from 'path';
6
6
  import { join } from 'path';
7
- import { createFlow, createGenerationResult, input, initGenerationContext, trackChange, printGenerationSummary, change, runFlow } from '@crossdelta/flowcore';
7
+ import { createFlow, createGenerationResult, input, initGenerationContext, trackChange, printGenerationSummary, runFlow, change } from '@crossdelta/flowcore';
8
8
  import 'url';
9
9
  import 'glob';
10
10
  import 'zod';
@@ -734,6 +734,7 @@ var nats_publisher_exports = {};
734
734
  __export(nats_publisher_exports, {
735
735
  __resetNatsPublisher: () => __resetNatsPublisher,
736
736
  closeConnection: () => closeConnection,
737
+ connectNats: () => connectNats,
737
738
  deriveStreamFromType: () => deriveStreamFromType,
738
739
  deriveSubjectFromType: () => deriveSubjectFromType,
739
740
  isNatsConnected: () => isNatsConnected,
@@ -741,7 +742,7 @@ __export(nats_publisher_exports, {
741
742
  publishNatsEvent: () => publishNatsEvent,
742
743
  publishNatsRawEvent: () => publishNatsRawEvent
743
744
  });
744
- var sc, natsConnectionPromise, deriveSubjectFromEventType, getNatsConnection, closeConnection, isNatsConnected, __resetNatsPublisher, deriveSubjectFromType, deriveStreamFromType, publishNatsRawEvent, publishNatsEvent, publish;
745
+ var sc, natsConnectionPromise, deriveSubjectFromEventType, getNatsConnection, closeConnection, connectNats, isNatsConnected, __resetNatsPublisher, deriveSubjectFromType, deriveStreamFromType, publishNatsRawEvent, publishNatsEvent, publish;
745
746
  var init_nats_publisher = __esm({
746
747
  "src/publishing/nats.publisher.ts"() {
747
748
  init_domain();
@@ -785,9 +786,13 @@ var init_nats_publisher = __esm({
785
786
  }
786
787
  }
787
788
  };
789
+ connectNats = async () => {
790
+ await getNatsConnection();
791
+ };
788
792
  isNatsConnected = async () => {
793
+ if (!natsConnectionPromise) return false;
789
794
  try {
790
- const nc = await getNatsConnection();
795
+ const nc = await natsConnectionPromise;
791
796
  return !nc.isClosed() && !nc.isDraining();
792
797
  } catch {
793
798
  return false;
package/dist/index.cjs CHANGED
@@ -1383,6 +1383,7 @@ var nats_publisher_exports = {};
1383
1383
  __export(nats_publisher_exports, {
1384
1384
  __resetNatsPublisher: () => exports.__resetNatsPublisher,
1385
1385
  closeConnection: () => exports.closeConnection,
1386
+ connectNats: () => exports.connectNats,
1386
1387
  deriveStreamFromType: () => exports.deriveStreamFromType,
1387
1388
  deriveSubjectFromType: () => exports.deriveSubjectFromType,
1388
1389
  isNatsConnected: () => exports.isNatsConnected,
@@ -1390,7 +1391,7 @@ __export(nats_publisher_exports, {
1390
1391
  publishNatsEvent: () => exports.publishNatsEvent,
1391
1392
  publishNatsRawEvent: () => exports.publishNatsRawEvent
1392
1393
  });
1393
- var sc, natsConnectionPromise, deriveSubjectFromEventType, getNatsConnection; exports.closeConnection = void 0; exports.isNatsConnected = void 0; exports.__resetNatsPublisher = void 0; exports.deriveSubjectFromType = void 0; exports.deriveStreamFromType = void 0; exports.publishNatsRawEvent = void 0; exports.publishNatsEvent = void 0; exports.publish = void 0;
1394
+ var sc, natsConnectionPromise, deriveSubjectFromEventType, getNatsConnection; exports.closeConnection = void 0; exports.connectNats = void 0; exports.isNatsConnected = void 0; exports.__resetNatsPublisher = void 0; exports.deriveSubjectFromType = void 0; exports.deriveStreamFromType = void 0; exports.publishNatsRawEvent = void 0; exports.publishNatsEvent = void 0; exports.publish = void 0;
1394
1395
  var init_nats_publisher = __esm({
1395
1396
  "src/publishing/nats.publisher.ts"() {
1396
1397
  init_domain();
@@ -1434,9 +1435,13 @@ var init_nats_publisher = __esm({
1434
1435
  }
1435
1436
  }
1436
1437
  };
1438
+ exports.connectNats = async () => {
1439
+ await getNatsConnection();
1440
+ };
1437
1441
  exports.isNatsConnected = async () => {
1442
+ if (!natsConnectionPromise) return false;
1438
1443
  try {
1439
- const nc = await getNatsConnection();
1444
+ const nc = await natsConnectionPromise;
1440
1445
  return !nc.isClosed() && !nc.isDraining();
1441
1446
  } catch {
1442
1447
  return false;
@@ -2163,7 +2168,7 @@ function cloudEvents(options = {}) {
2163
2168
  // package.json
2164
2169
  var package_default = {
2165
2170
  name: "@crossdelta/cloudevents",
2166
- version: "0.6.5",
2171
+ version: "0.6.8",
2167
2172
  description: "CloudEvents toolkit for TypeScript - Zod validation, handler discovery, NATS JetStream"};
2168
2173
 
2169
2174
  // src/plugin.ts
package/dist/index.d.cts CHANGED
@@ -2,7 +2,6 @@ import { Context } from 'hono';
2
2
  import { CloudEventV1 } from 'cloudevents';
3
3
  import { ZodTypeAny, z } from 'zod';
4
4
  import { ChangeResult, FlowContext, FsContextMixin, GenerationContextMixin, FlowStep } from '@crossdelta/flowcore';
5
- import { PfPlugin } from '@crossdelta/platform-sdk';
6
5
  import { ConsumerMessages, Subscription } from 'nats';
7
6
 
8
7
  /**
@@ -1176,6 +1175,109 @@ interface CloudEventsOptions {
1176
1175
  */
1177
1176
  declare function cloudEvents(options?: CloudEventsOptions): (ctx: Context, next: () => Promise<void>) => Promise<void | Response>;
1178
1177
 
1178
+ /**
1179
+ * Plugin System Types
1180
+ *
1181
+ * pf owns and defines these interfaces.
1182
+ * Plugins MUST adapt to these interfaces.
1183
+ * pf is strict and predictable - no duck-typing, no fallbacks.
1184
+ */
1185
+ /**
1186
+ * Base effect type - all domain effects must have a kind
1187
+ * pf handles effects generically via kind-based handler registry
1188
+ */
1189
+ interface PfEffect {
1190
+ readonly kind: string;
1191
+ }
1192
+ /**
1193
+ * Result of running a command
1194
+ */
1195
+ interface PfCommandResult {
1196
+ /** Domain effects to be applied by the runtime */
1197
+ effects: PfEffect[];
1198
+ /** Optional output to display (for read-only commands) */
1199
+ output?: string | string[];
1200
+ }
1201
+ /**
1202
+ * Command argument definition
1203
+ */
1204
+ interface PfCommandArg {
1205
+ name: string;
1206
+ description: string;
1207
+ required: boolean;
1208
+ }
1209
+ /**
1210
+ * Command option definition
1211
+ */
1212
+ interface PfCommandOption {
1213
+ flags: string;
1214
+ description: string;
1215
+ default?: unknown;
1216
+ }
1217
+ /**
1218
+ * A CLI command provided by a plugin
1219
+ *
1220
+ * Plugins MUST implement this exact interface.
1221
+ */
1222
+ interface PfCommand {
1223
+ name: string;
1224
+ description: string;
1225
+ args: PfCommandArg[];
1226
+ options: PfCommandOption[];
1227
+ run(args: Record<string, unknown>, options: Record<string, unknown>): Promise<PfCommandResult>;
1228
+ }
1229
+ /**
1230
+ * An interactive flow provided by a plugin
1231
+ */
1232
+ interface PfFlow {
1233
+ name: string;
1234
+ description: string;
1235
+ getSteps(initialContext?: Record<string, unknown>): Promise<unknown[]>;
1236
+ }
1237
+ /**
1238
+ * Workspace context with all discovered information
1239
+ * pf owns this - plugins receive it during setup
1240
+ */
1241
+ interface PfWorkspaceContext {
1242
+ /** Absolute path to workspace root */
1243
+ workspaceRoot: string;
1244
+ /** Discovered services (relative paths like 'services/api-gateway') */
1245
+ availableServices: string[];
1246
+ /** Contracts package configuration */
1247
+ contracts: {
1248
+ /** Relative path to contracts source (e.g., 'packages/contracts/src') */
1249
+ path: string;
1250
+ /** Package name (e.g., '@my-platform/contracts') */
1251
+ packageName?: string;
1252
+ };
1253
+ }
1254
+ /**
1255
+ * Plugin context provided by pf during setup
1256
+ */
1257
+ interface PfPluginContext {
1258
+ workspace: PfWorkspaceContext;
1259
+ logger: {
1260
+ debug: (message: string) => void;
1261
+ info: (message: string) => void;
1262
+ warn: (message: string) => void;
1263
+ error: (message: string) => void;
1264
+ };
1265
+ }
1266
+ /**
1267
+ * A plugin that can be loaded by pf
1268
+ *
1269
+ * Plugins MUST implement this exact interface.
1270
+ * If a plugin has a different internal API, it must provide an adapter.
1271
+ */
1272
+ interface PfPlugin {
1273
+ name: string;
1274
+ version: string;
1275
+ description?: string;
1276
+ commands: PfCommand[];
1277
+ flows: PfFlow[];
1278
+ setup: (context: PfPluginContext) => Promise<void> | void;
1279
+ }
1280
+
1179
1281
  /**
1180
1282
  * PfPlugin Adapter
1181
1283
  *
@@ -1208,9 +1310,12 @@ interface PublishNatsEventOptions {
1208
1310
  */
1209
1311
  declare const closeConnection: () => Promise<void>;
1210
1312
  /**
1211
- * Returns true if NATS is reachable and the connection is not closed/draining.
1212
- * Will attempt to establish a connection if none exists yet.
1213
- * Suitable for use in readiness health checks.
1313
+ * Eagerly establishes the NATS connection. Call this on application startup
1314
+ * so that `isNatsConnected()` reflects real connectivity from the first probe.
1315
+ */
1316
+ declare const connectNats: () => Promise<void>;
1317
+ /**
1318
+ * Returns true if a NATS connection is currently established and healthy.
1214
1319
  */
1215
1320
  declare const isNatsConnected: () => Promise<boolean>;
1216
1321
  /**
@@ -1498,4 +1603,4 @@ interface NatsConsumerOptions extends Pick<CloudEventsOptions, 'quarantineTopic'
1498
1603
  */
1499
1604
  declare function consumeNatsEvents(options: NatsConsumerOptions): Promise<Subscription>;
1500
1605
 
1501
- export { type ChannelConfig, type ChannelMetadata, type CloudEventsPfPluginOptions, type ContractCreatedEffect, type ContractPaths, type CreateEventContext, type CreateEventOptions, type DomainEffect, type EnrichedEvent, type EventContext, type EventNames, type EventTypeValidation, type FileSystem, type HandleEventOptions, type HandlerCreatedEffect, type IdempotencyStore, type InferEventData, type JetStreamConsumerOptions, type JetStreamStreamOptions, type JetStreamStreamsConsumerOptions, type JetStreamStreamsOptions, type ListEventsContext, type PublishEventContext, type PublishEventOptions, type PublishNatsEventOptions, type RoutingConfig, type SchemaField, type StreamConfig, type StreamDefinition, type StreamWiredEffect, __resetNatsPublisher, checkAndMarkProcessed, clearHandlerCache, closeConnection, cloudEvents, consumeJetStreamEvents, consumeJetStreamStreams, consumeJetStreams, consumeNatsEvents, contractCreated, createContract, createEvent, createEventFlowSteps, createInMemoryIdempotencyStore, createMemoryFileSystem, createPfPlugin, deriveEventNames, deriveStreamFromType, deriveSubjectFromType, discoverEventTypes, ensureJetStreamStream, ensureJetStreamStreams, ensureJetStreams, eventSchema, extractTypeFromSchema, generateContract, generateContractContent, generateEventHandler, generateEventHandlerContent, generateJsonMock, generateJsonMockFromContract, generateMock, generateMockContent, getContractFilePath, getContractPaths, getDefaultIdempotencyStore, getHandlerFilePath, getHandlerPath, getJsonMockPath, getMockFilePath, getStreamName, handleEvent, handlerCreated, initFaker, isNatsConnected, isValidEventType, jsonMockExists, listEvents, listEventsFlowSteps, loadJsonMock, normalizeSubject, parseDataInput, parseEventFromContext, parseEventTypeFromContract, parseEventTypeFromHandler, parseFieldsInput, pluralize, publish, publishEvent, publishEventFlowSteps, publishNatsEvent, publishNatsRawEvent, publishRawEvent, resetDefaultIdempotencyStore, singularize, streamWired, toKebabCase, toPascalCase, validateEventType };
1606
+ export { type ChannelConfig, type ChannelMetadata, type CloudEventsPfPluginOptions, type ContractCreatedEffect, type ContractPaths, type CreateEventContext, type CreateEventOptions, type DomainEffect, type EnrichedEvent, type EventContext, type EventNames, type EventTypeValidation, type FileSystem, type HandleEventOptions, type HandlerCreatedEffect, type IdempotencyStore, type InferEventData, type JetStreamConsumerOptions, type JetStreamStreamOptions, type JetStreamStreamsConsumerOptions, type JetStreamStreamsOptions, type ListEventsContext, type PublishEventContext, type PublishEventOptions, type PublishNatsEventOptions, type RoutingConfig, type SchemaField, type StreamConfig, type StreamDefinition, type StreamWiredEffect, __resetNatsPublisher, checkAndMarkProcessed, clearHandlerCache, closeConnection, cloudEvents, connectNats, consumeJetStreamEvents, consumeJetStreamStreams, consumeJetStreams, consumeNatsEvents, contractCreated, createContract, createEvent, createEventFlowSteps, createInMemoryIdempotencyStore, createMemoryFileSystem, createPfPlugin, deriveEventNames, deriveStreamFromType, deriveSubjectFromType, discoverEventTypes, ensureJetStreamStream, ensureJetStreamStreams, ensureJetStreams, eventSchema, extractTypeFromSchema, generateContract, generateContractContent, generateEventHandler, generateEventHandlerContent, generateJsonMock, generateJsonMockFromContract, generateMock, generateMockContent, getContractFilePath, getContractPaths, getDefaultIdempotencyStore, getHandlerFilePath, getHandlerPath, getJsonMockPath, getMockFilePath, getStreamName, handleEvent, handlerCreated, initFaker, isNatsConnected, isValidEventType, jsonMockExists, listEvents, listEventsFlowSteps, loadJsonMock, normalizeSubject, parseDataInput, parseEventFromContext, parseEventTypeFromContract, parseEventTypeFromHandler, parseFieldsInput, pluralize, publish, publishEvent, publishEventFlowSteps, publishNatsEvent, publishNatsRawEvent, publishRawEvent, resetDefaultIdempotencyStore, singularize, streamWired, toKebabCase, toPascalCase, validateEventType };
package/dist/index.d.ts CHANGED
@@ -2,7 +2,6 @@ import { Context } from 'hono';
2
2
  import { CloudEventV1 } from 'cloudevents';
3
3
  import { ZodTypeAny, z } from 'zod';
4
4
  import { ChangeResult, FlowContext, FsContextMixin, GenerationContextMixin, FlowStep } from '@crossdelta/flowcore';
5
- import { PfPlugin } from '@crossdelta/platform-sdk';
6
5
  import { ConsumerMessages, Subscription } from 'nats';
7
6
 
8
7
  /**
@@ -1176,6 +1175,109 @@ interface CloudEventsOptions {
1176
1175
  */
1177
1176
  declare function cloudEvents(options?: CloudEventsOptions): (ctx: Context, next: () => Promise<void>) => Promise<void | Response>;
1178
1177
 
1178
+ /**
1179
+ * Plugin System Types
1180
+ *
1181
+ * pf owns and defines these interfaces.
1182
+ * Plugins MUST adapt to these interfaces.
1183
+ * pf is strict and predictable - no duck-typing, no fallbacks.
1184
+ */
1185
+ /**
1186
+ * Base effect type - all domain effects must have a kind
1187
+ * pf handles effects generically via kind-based handler registry
1188
+ */
1189
+ interface PfEffect {
1190
+ readonly kind: string;
1191
+ }
1192
+ /**
1193
+ * Result of running a command
1194
+ */
1195
+ interface PfCommandResult {
1196
+ /** Domain effects to be applied by the runtime */
1197
+ effects: PfEffect[];
1198
+ /** Optional output to display (for read-only commands) */
1199
+ output?: string | string[];
1200
+ }
1201
+ /**
1202
+ * Command argument definition
1203
+ */
1204
+ interface PfCommandArg {
1205
+ name: string;
1206
+ description: string;
1207
+ required: boolean;
1208
+ }
1209
+ /**
1210
+ * Command option definition
1211
+ */
1212
+ interface PfCommandOption {
1213
+ flags: string;
1214
+ description: string;
1215
+ default?: unknown;
1216
+ }
1217
+ /**
1218
+ * A CLI command provided by a plugin
1219
+ *
1220
+ * Plugins MUST implement this exact interface.
1221
+ */
1222
+ interface PfCommand {
1223
+ name: string;
1224
+ description: string;
1225
+ args: PfCommandArg[];
1226
+ options: PfCommandOption[];
1227
+ run(args: Record<string, unknown>, options: Record<string, unknown>): Promise<PfCommandResult>;
1228
+ }
1229
+ /**
1230
+ * An interactive flow provided by a plugin
1231
+ */
1232
+ interface PfFlow {
1233
+ name: string;
1234
+ description: string;
1235
+ getSteps(initialContext?: Record<string, unknown>): Promise<unknown[]>;
1236
+ }
1237
+ /**
1238
+ * Workspace context with all discovered information
1239
+ * pf owns this - plugins receive it during setup
1240
+ */
1241
+ interface PfWorkspaceContext {
1242
+ /** Absolute path to workspace root */
1243
+ workspaceRoot: string;
1244
+ /** Discovered services (relative paths like 'services/api-gateway') */
1245
+ availableServices: string[];
1246
+ /** Contracts package configuration */
1247
+ contracts: {
1248
+ /** Relative path to contracts source (e.g., 'packages/contracts/src') */
1249
+ path: string;
1250
+ /** Package name (e.g., '@my-platform/contracts') */
1251
+ packageName?: string;
1252
+ };
1253
+ }
1254
+ /**
1255
+ * Plugin context provided by pf during setup
1256
+ */
1257
+ interface PfPluginContext {
1258
+ workspace: PfWorkspaceContext;
1259
+ logger: {
1260
+ debug: (message: string) => void;
1261
+ info: (message: string) => void;
1262
+ warn: (message: string) => void;
1263
+ error: (message: string) => void;
1264
+ };
1265
+ }
1266
+ /**
1267
+ * A plugin that can be loaded by pf
1268
+ *
1269
+ * Plugins MUST implement this exact interface.
1270
+ * If a plugin has a different internal API, it must provide an adapter.
1271
+ */
1272
+ interface PfPlugin {
1273
+ name: string;
1274
+ version: string;
1275
+ description?: string;
1276
+ commands: PfCommand[];
1277
+ flows: PfFlow[];
1278
+ setup: (context: PfPluginContext) => Promise<void> | void;
1279
+ }
1280
+
1179
1281
  /**
1180
1282
  * PfPlugin Adapter
1181
1283
  *
@@ -1208,9 +1310,12 @@ interface PublishNatsEventOptions {
1208
1310
  */
1209
1311
  declare const closeConnection: () => Promise<void>;
1210
1312
  /**
1211
- * Returns true if NATS is reachable and the connection is not closed/draining.
1212
- * Will attempt to establish a connection if none exists yet.
1213
- * Suitable for use in readiness health checks.
1313
+ * Eagerly establishes the NATS connection. Call this on application startup
1314
+ * so that `isNatsConnected()` reflects real connectivity from the first probe.
1315
+ */
1316
+ declare const connectNats: () => Promise<void>;
1317
+ /**
1318
+ * Returns true if a NATS connection is currently established and healthy.
1214
1319
  */
1215
1320
  declare const isNatsConnected: () => Promise<boolean>;
1216
1321
  /**
@@ -1498,4 +1603,4 @@ interface NatsConsumerOptions extends Pick<CloudEventsOptions, 'quarantineTopic'
1498
1603
  */
1499
1604
  declare function consumeNatsEvents(options: NatsConsumerOptions): Promise<Subscription>;
1500
1605
 
1501
- export { type ChannelConfig, type ChannelMetadata, type CloudEventsPfPluginOptions, type ContractCreatedEffect, type ContractPaths, type CreateEventContext, type CreateEventOptions, type DomainEffect, type EnrichedEvent, type EventContext, type EventNames, type EventTypeValidation, type FileSystem, type HandleEventOptions, type HandlerCreatedEffect, type IdempotencyStore, type InferEventData, type JetStreamConsumerOptions, type JetStreamStreamOptions, type JetStreamStreamsConsumerOptions, type JetStreamStreamsOptions, type ListEventsContext, type PublishEventContext, type PublishEventOptions, type PublishNatsEventOptions, type RoutingConfig, type SchemaField, type StreamConfig, type StreamDefinition, type StreamWiredEffect, __resetNatsPublisher, checkAndMarkProcessed, clearHandlerCache, closeConnection, cloudEvents, consumeJetStreamEvents, consumeJetStreamStreams, consumeJetStreams, consumeNatsEvents, contractCreated, createContract, createEvent, createEventFlowSteps, createInMemoryIdempotencyStore, createMemoryFileSystem, createPfPlugin, deriveEventNames, deriveStreamFromType, deriveSubjectFromType, discoverEventTypes, ensureJetStreamStream, ensureJetStreamStreams, ensureJetStreams, eventSchema, extractTypeFromSchema, generateContract, generateContractContent, generateEventHandler, generateEventHandlerContent, generateJsonMock, generateJsonMockFromContract, generateMock, generateMockContent, getContractFilePath, getContractPaths, getDefaultIdempotencyStore, getHandlerFilePath, getHandlerPath, getJsonMockPath, getMockFilePath, getStreamName, handleEvent, handlerCreated, initFaker, isNatsConnected, isValidEventType, jsonMockExists, listEvents, listEventsFlowSteps, loadJsonMock, normalizeSubject, parseDataInput, parseEventFromContext, parseEventTypeFromContract, parseEventTypeFromHandler, parseFieldsInput, pluralize, publish, publishEvent, publishEventFlowSteps, publishNatsEvent, publishNatsRawEvent, publishRawEvent, resetDefaultIdempotencyStore, singularize, streamWired, toKebabCase, toPascalCase, validateEventType };
1606
+ export { type ChannelConfig, type ChannelMetadata, type CloudEventsPfPluginOptions, type ContractCreatedEffect, type ContractPaths, type CreateEventContext, type CreateEventOptions, type DomainEffect, type EnrichedEvent, type EventContext, type EventNames, type EventTypeValidation, type FileSystem, type HandleEventOptions, type HandlerCreatedEffect, type IdempotencyStore, type InferEventData, type JetStreamConsumerOptions, type JetStreamStreamOptions, type JetStreamStreamsConsumerOptions, type JetStreamStreamsOptions, type ListEventsContext, type PublishEventContext, type PublishEventOptions, type PublishNatsEventOptions, type RoutingConfig, type SchemaField, type StreamConfig, type StreamDefinition, type StreamWiredEffect, __resetNatsPublisher, checkAndMarkProcessed, clearHandlerCache, closeConnection, cloudEvents, connectNats, consumeJetStreamEvents, consumeJetStreamStreams, consumeJetStreams, consumeNatsEvents, contractCreated, createContract, createEvent, createEventFlowSteps, createInMemoryIdempotencyStore, createMemoryFileSystem, createPfPlugin, deriveEventNames, deriveStreamFromType, deriveSubjectFromType, discoverEventTypes, ensureJetStreamStream, ensureJetStreamStreams, ensureJetStreams, eventSchema, extractTypeFromSchema, generateContract, generateContractContent, generateEventHandler, generateEventHandlerContent, generateJsonMock, generateJsonMockFromContract, generateMock, generateMockContent, getContractFilePath, getContractPaths, getDefaultIdempotencyStore, getHandlerFilePath, getHandlerPath, getJsonMockPath, getMockFilePath, getStreamName, handleEvent, handlerCreated, initFaker, isNatsConnected, isValidEventType, jsonMockExists, listEvents, listEventsFlowSteps, loadJsonMock, normalizeSubject, parseDataInput, parseEventFromContext, parseEventTypeFromContract, parseEventTypeFromHandler, parseFieldsInput, pluralize, publish, publishEvent, publishEventFlowSteps, publishNatsEvent, publishNatsRawEvent, publishRawEvent, resetDefaultIdempotencyStore, singularize, streamWired, toKebabCase, toPascalCase, validateEventType };
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@ import * as fs from 'fs';
4
4
  import { existsSync, readdirSync, statSync } from 'fs';
5
5
  import * as path from 'path';
6
6
  import { join, dirname } from 'path';
7
- import { createFlow, createGenerationResult, input, initGenerationContext, trackChange, printGenerationSummary, change, runFlow } from '@crossdelta/flowcore';
7
+ import { createFlow, createGenerationResult, input, initGenerationContext, trackChange, printGenerationSummary, runFlow, change } from '@crossdelta/flowcore';
8
8
  import { fileURLToPath } from 'url';
9
9
  import { glob } from 'glob';
10
10
  import { z } from 'zod';
@@ -1358,6 +1358,7 @@ var nats_publisher_exports = {};
1358
1358
  __export(nats_publisher_exports, {
1359
1359
  __resetNatsPublisher: () => __resetNatsPublisher,
1360
1360
  closeConnection: () => closeConnection,
1361
+ connectNats: () => connectNats,
1361
1362
  deriveStreamFromType: () => deriveStreamFromType,
1362
1363
  deriveSubjectFromType: () => deriveSubjectFromType,
1363
1364
  isNatsConnected: () => isNatsConnected,
@@ -1365,7 +1366,7 @@ __export(nats_publisher_exports, {
1365
1366
  publishNatsEvent: () => publishNatsEvent,
1366
1367
  publishNatsRawEvent: () => publishNatsRawEvent
1367
1368
  });
1368
- var sc, natsConnectionPromise, deriveSubjectFromEventType, getNatsConnection, closeConnection, isNatsConnected, __resetNatsPublisher, deriveSubjectFromType, deriveStreamFromType, publishNatsRawEvent, publishNatsEvent, publish;
1369
+ var sc, natsConnectionPromise, deriveSubjectFromEventType, getNatsConnection, closeConnection, connectNats, isNatsConnected, __resetNatsPublisher, deriveSubjectFromType, deriveStreamFromType, publishNatsRawEvent, publishNatsEvent, publish;
1369
1370
  var init_nats_publisher = __esm({
1370
1371
  "src/publishing/nats.publisher.ts"() {
1371
1372
  init_domain();
@@ -1409,9 +1410,13 @@ var init_nats_publisher = __esm({
1409
1410
  }
1410
1411
  }
1411
1412
  };
1413
+ connectNats = async () => {
1414
+ await getNatsConnection();
1415
+ };
1412
1416
  isNatsConnected = async () => {
1417
+ if (!natsConnectionPromise) return false;
1413
1418
  try {
1414
- const nc = await getNatsConnection();
1419
+ const nc = await natsConnectionPromise;
1415
1420
  return !nc.isClosed() && !nc.isDraining();
1416
1421
  } catch {
1417
1422
  return false;
@@ -2138,7 +2143,7 @@ function cloudEvents(options = {}) {
2138
2143
  // package.json
2139
2144
  var package_default = {
2140
2145
  name: "@crossdelta/cloudevents",
2141
- version: "0.6.5",
2146
+ version: "0.6.8",
2142
2147
  description: "CloudEvents toolkit for TypeScript - Zod validation, handler discovery, NATS JetStream"};
2143
2148
 
2144
2149
  // src/plugin.ts
@@ -2750,4 +2755,4 @@ async function consumeNatsEvents(options) {
2750
2755
  // src/index.ts
2751
2756
  init_utils();
2752
2757
 
2753
- export { __resetNatsPublisher, checkAndMarkProcessed, clearHandlerCache, closeConnection, cloudEvents, consumeJetStreamEvents, consumeJetStreamStreams, consumeJetStreams, consumeNatsEvents, contractCreated, createContract, createEvent, createEventFlowSteps, createInMemoryIdempotencyStore, createMemoryFileSystem, createPfPlugin, deriveEventNames, deriveStreamFromType, deriveSubjectFromType, discoverEventTypes, ensureJetStreamStream, ensureJetStreamStreams, ensureJetStreams, eventSchema, extractTypeFromSchema, generateContract, generateContractContent, generateEventHandler, generateEventHandlerContent, generateJsonMock, generateJsonMockFromContract, generateMock, generateMockContent, getContractFilePath, getContractPaths, getDefaultIdempotencyStore, getHandlerFilePath, getHandlerPath, getJsonMockPath, getMockFilePath, getStreamName, handleEvent, handlerCreated, initFaker, isNatsConnected, isValidEventType, jsonMockExists, listEvents, listEventsFlowSteps, loadJsonMock, normalizeSubject, parseDataInput, parseEventFromContext, parseEventTypeFromContract, parseEventTypeFromHandler, parseFieldsInput, pluralize, publish, publishEvent, publishEventFlowSteps, publishNatsEvent, publishNatsRawEvent, publishRawEvent, resetDefaultIdempotencyStore, singularize, streamWired, toKebabCase, toPascalCase, validateEventType };
2758
+ export { __resetNatsPublisher, checkAndMarkProcessed, clearHandlerCache, closeConnection, cloudEvents, connectNats, consumeJetStreamEvents, consumeJetStreamStreams, consumeJetStreams, consumeNatsEvents, contractCreated, createContract, createEvent, createEventFlowSteps, createInMemoryIdempotencyStore, createMemoryFileSystem, createPfPlugin, deriveEventNames, deriveStreamFromType, deriveSubjectFromType, discoverEventTypes, ensureJetStreamStream, ensureJetStreamStreams, ensureJetStreams, eventSchema, extractTypeFromSchema, generateContract, generateContractContent, generateEventHandler, generateEventHandlerContent, generateJsonMock, generateJsonMockFromContract, generateMock, generateMockContent, getContractFilePath, getContractPaths, getDefaultIdempotencyStore, getHandlerFilePath, getHandlerPath, getJsonMockPath, getMockFilePath, getStreamName, handleEvent, handlerCreated, initFaker, isNatsConnected, isValidEventType, jsonMockExists, listEvents, listEventsFlowSteps, loadJsonMock, normalizeSubject, parseDataInput, parseEventFromContext, parseEventTypeFromContract, parseEventTypeFromHandler, parseFieldsInput, pluralize, publish, publishEvent, publishEventFlowSteps, publishNatsEvent, publishNatsRawEvent, publishRawEvent, resetDefaultIdempotencyStore, singularize, streamWired, toKebabCase, toPascalCase, validateEventType };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crossdelta/cloudevents",
3
- "version": "0.6.5",
3
+ "version": "0.6.8",
4
4
  "description": "CloudEvents toolkit for TypeScript - Zod validation, handler discovery, NATS JetStream",
5
5
  "author": "crossdelta",
6
6
  "license": "MIT",
@@ -56,7 +56,7 @@
56
56
  "peerDependencies": {
57
57
  "@faker-js/faker": ">=9.0.0",
58
58
  "@google-cloud/pubsub": ">=4.0.0",
59
- "hono": "^4.11.4",
59
+ "hono": "^4.12.3",
60
60
  "zod": "^4.0.0"
61
61
  },
62
62
  "peerDependenciesMeta": {
@@ -71,13 +71,12 @@
71
71
  }
72
72
  },
73
73
  "devDependencies": {
74
- "@crossdelta/platform-sdk": "0.19.5",
75
74
  "@faker-js/faker": "^9.7.0",
76
75
  "@google-cloud/pubsub": "^4.9.0",
77
76
  "@stryker-mutator/core": "^9.1.1",
78
77
  "@types/bun": "^1.3.3",
79
78
  "@types/pluralize": "^0.0.33",
80
- "hono": "^4.12.0",
79
+ "hono": "^4.12.3",
81
80
  "stryker-mutator-bun-runner": "^0.4.0",
82
81
  "tsup": "^8.3.5",
83
82
  "typescript": "^5.9.2"