@123toto/ai-app-assistant-server 0.2.1 → 0.2.3

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.
@@ -37,7 +37,9 @@ interface AiAppAssistant {
37
37
  declare function createAiAppAssistant(options: AiAppAssistantOptions): AiAppAssistant;
38
38
 
39
39
  /** Providers available without installing an additional AI SDK package. */
40
- type BuiltInProvider = "anthropic" | "google" | "mistral" | "ollama" | "openai";
40
+ declare const AI_APP_ASSISTANT_PROVIDERS: readonly ["anthropic", "google", "mistral", "ollama", "openai"];
41
+ /** Provider identifier derived from the runtime-neutral exported catalog. */
42
+ type BuiltInProvider = typeof AI_APP_ASSISTANT_PROVIDERS[number];
41
43
  /** Stable provider metadata suitable for a settings interface. */
42
44
  interface AiProviderInfo {
43
45
  id: BuiltInProvider;
@@ -535,4 +537,4 @@ interface ManagedAiAppAssistantServer<TIdentity extends AiAppAssistantRuntimeIde
535
537
  */
536
538
  declare function createManagedAiAppAssistantServer<TIdentity extends AiAppAssistantRuntimeIdentity, TNativeContext = undefined>(options: CreateManagedAiAppAssistantServerOptions<TIdentity, TNativeContext>): ManagedAiAppAssistantServer<TIdentity, TNativeContext>;
537
539
 
538
- export { createManagedAiAppAssistantRuntime as $, type AiAppAssistant as A, type BuiltInProvider as B, type AiAppAssistantRecentFailure as C, type AiAppAssistantRedisClient as D, type AiAppAssistantRedisQuotaClient as E, type AiAppAssistantRedisTelemetryClient as F, type AiAppAssistantRuntimeIdentity as G, type AiAppAssistantSecretProtector as H, type AiAppAssistantTelemetryStore as I, type AiAppAssistantTelemetrySummary as J, AiModelDiscoveryError as K, type AiModelInfo as L, type ManagedAiAppAssistantServer as M, type AiProviderInfo as N, type CreateAiAppAssistantConfigurationRepositoryOptions as O, type CreateManagedAiAppAssistantRuntimeOptions as P, type CreateManagedAiAppAssistantServerOptions as Q, type ListAiModelsOptions as R, type ManagedAiAppAssistantFetchHandlerOptions as S, type ManagedAiAppAssistantFetchHandlers as T, type ManagedAiAppAssistantRuntime as U, createAes256GcmSecretProtector as V, createAiAppAssistant as W, createAiAppAssistantConfigurationRepository as X, createAiAppAssistantFailureEvent as Y, createDisabledSecretProtector as Z, createManagedAiAppAssistantFetchHandlers as _, type AiAppAssistantStreamEvent as a, createManagedAiAppAssistantServer as a0, createMemoryAiAppAssistantQuotaStore as a1, createMemoryAiAppAssistantStore as a2, createMemoryAiAppAssistantTelemetryStore as a3, createPollingAiAppAssistantConfigurationSynchronizer as a4, createRedisAiAppAssistantQuotaStore as a5, createRedisAiAppAssistantStore as a6, createRedisAiAppAssistantTelemetryStore as a7, listAiModels as a8, listAiProviders as a9, validateAndSaveAiAppAssistantConfiguration as aa, type AiAppAssistantConfiguration as b, type AiAppAssistantAccessRule as c, type AiAppAssistantConfigurationActor as d, type AiAppAssistantConfigurationAdministration as e, type AiAppAssistantConfigurationAuditChange as f, type AiAppAssistantConfigurationAuditEntry as g, type AiAppAssistantConfigurationAuditField as h, type AiAppAssistantConfigurationChangeEvent as i, AiAppAssistantConfigurationConflictError as j, AiAppAssistantConfigurationManager as k, type AiAppAssistantConfigurationManagerOptions as l, type AiAppAssistantConfigurationRepository as m, type AiAppAssistantConfigurationSaveResult as n, type AiAppAssistantConfigurationSynchronizer as o, type AiAppAssistantConfigurationView as p, type AiAppAssistantGenerationEvent as q, type AiAppAssistantGenerationOperation as r, type AiAppAssistantKeyValueStore as s, type AiAppAssistantManagedConfigurationSetup as t, type AiAppAssistantManagedStorage as u, AiAppAssistantManagementError as v, type AiAppAssistantManagementErrorCode as w, type AiAppAssistantQuotaPolicy as x, type AiAppAssistantQuotaResult as y, type AiAppAssistantQuotaStore as z };
540
+ export { createManagedAiAppAssistantFetchHandlers as $, type AiAppAssistant as A, type BuiltInProvider as B, type AiAppAssistantQuotaStore as C, type AiAppAssistantRecentFailure as D, type AiAppAssistantRedisClient as E, type AiAppAssistantRedisQuotaClient as F, type AiAppAssistantRedisTelemetryClient as G, type AiAppAssistantRuntimeIdentity as H, type AiAppAssistantSecretProtector as I, type AiAppAssistantTelemetryStore as J, type AiAppAssistantTelemetrySummary as K, AiModelDiscoveryError as L, type ManagedAiAppAssistantServer as M, type AiModelInfo as N, type AiProviderInfo as O, type CreateAiAppAssistantConfigurationRepositoryOptions as P, type CreateManagedAiAppAssistantRuntimeOptions as Q, type CreateManagedAiAppAssistantServerOptions as R, type ListAiModelsOptions as S, type ManagedAiAppAssistantFetchHandlerOptions as T, type ManagedAiAppAssistantFetchHandlers as U, type ManagedAiAppAssistantRuntime as V, createAes256GcmSecretProtector as W, createAiAppAssistant as X, createAiAppAssistantConfigurationRepository as Y, createAiAppAssistantFailureEvent as Z, createDisabledSecretProtector as _, type AiAppAssistantStreamEvent as a, createManagedAiAppAssistantRuntime as a0, createManagedAiAppAssistantServer as a1, createMemoryAiAppAssistantQuotaStore as a2, createMemoryAiAppAssistantStore as a3, createMemoryAiAppAssistantTelemetryStore as a4, createPollingAiAppAssistantConfigurationSynchronizer as a5, createRedisAiAppAssistantQuotaStore as a6, createRedisAiAppAssistantStore as a7, createRedisAiAppAssistantTelemetryStore as a8, listAiModels as a9, listAiProviders as aa, validateAndSaveAiAppAssistantConfiguration as ab, type AiAppAssistantConfiguration as b, AI_APP_ASSISTANT_PROVIDERS as c, type AiAppAssistantAccessRule as d, type AiAppAssistantConfigurationActor as e, type AiAppAssistantConfigurationAdministration as f, type AiAppAssistantConfigurationAuditChange as g, type AiAppAssistantConfigurationAuditEntry as h, type AiAppAssistantConfigurationAuditField as i, type AiAppAssistantConfigurationChangeEvent as j, AiAppAssistantConfigurationConflictError as k, AiAppAssistantConfigurationManager as l, type AiAppAssistantConfigurationManagerOptions as m, type AiAppAssistantConfigurationRepository as n, type AiAppAssistantConfigurationSaveResult as o, type AiAppAssistantConfigurationSynchronizer as p, type AiAppAssistantConfigurationView as q, type AiAppAssistantGenerationEvent as r, type AiAppAssistantGenerationOperation as s, type AiAppAssistantKeyValueStore as t, type AiAppAssistantManagedConfigurationSetup as u, type AiAppAssistantManagedStorage as v, AiAppAssistantManagementError as w, type AiAppAssistantManagementErrorCode as x, type AiAppAssistantQuotaPolicy as y, type AiAppAssistantQuotaResult as z };
@@ -37,7 +37,9 @@ interface AiAppAssistant {
37
37
  declare function createAiAppAssistant(options: AiAppAssistantOptions): AiAppAssistant;
38
38
 
39
39
  /** Providers available without installing an additional AI SDK package. */
40
- type BuiltInProvider = "anthropic" | "google" | "mistral" | "ollama" | "openai";
40
+ declare const AI_APP_ASSISTANT_PROVIDERS: readonly ["anthropic", "google", "mistral", "ollama", "openai"];
41
+ /** Provider identifier derived from the runtime-neutral exported catalog. */
42
+ type BuiltInProvider = typeof AI_APP_ASSISTANT_PROVIDERS[number];
41
43
  /** Stable provider metadata suitable for a settings interface. */
42
44
  interface AiProviderInfo {
43
45
  id: BuiltInProvider;
@@ -535,4 +537,4 @@ interface ManagedAiAppAssistantServer<TIdentity extends AiAppAssistantRuntimeIde
535
537
  */
536
538
  declare function createManagedAiAppAssistantServer<TIdentity extends AiAppAssistantRuntimeIdentity, TNativeContext = undefined>(options: CreateManagedAiAppAssistantServerOptions<TIdentity, TNativeContext>): ManagedAiAppAssistantServer<TIdentity, TNativeContext>;
537
539
 
538
- export { createManagedAiAppAssistantRuntime as $, type AiAppAssistant as A, type BuiltInProvider as B, type AiAppAssistantRecentFailure as C, type AiAppAssistantRedisClient as D, type AiAppAssistantRedisQuotaClient as E, type AiAppAssistantRedisTelemetryClient as F, type AiAppAssistantRuntimeIdentity as G, type AiAppAssistantSecretProtector as H, type AiAppAssistantTelemetryStore as I, type AiAppAssistantTelemetrySummary as J, AiModelDiscoveryError as K, type AiModelInfo as L, type ManagedAiAppAssistantServer as M, type AiProviderInfo as N, type CreateAiAppAssistantConfigurationRepositoryOptions as O, type CreateManagedAiAppAssistantRuntimeOptions as P, type CreateManagedAiAppAssistantServerOptions as Q, type ListAiModelsOptions as R, type ManagedAiAppAssistantFetchHandlerOptions as S, type ManagedAiAppAssistantFetchHandlers as T, type ManagedAiAppAssistantRuntime as U, createAes256GcmSecretProtector as V, createAiAppAssistant as W, createAiAppAssistantConfigurationRepository as X, createAiAppAssistantFailureEvent as Y, createDisabledSecretProtector as Z, createManagedAiAppAssistantFetchHandlers as _, type AiAppAssistantStreamEvent as a, createManagedAiAppAssistantServer as a0, createMemoryAiAppAssistantQuotaStore as a1, createMemoryAiAppAssistantStore as a2, createMemoryAiAppAssistantTelemetryStore as a3, createPollingAiAppAssistantConfigurationSynchronizer as a4, createRedisAiAppAssistantQuotaStore as a5, createRedisAiAppAssistantStore as a6, createRedisAiAppAssistantTelemetryStore as a7, listAiModels as a8, listAiProviders as a9, validateAndSaveAiAppAssistantConfiguration as aa, type AiAppAssistantConfiguration as b, type AiAppAssistantAccessRule as c, type AiAppAssistantConfigurationActor as d, type AiAppAssistantConfigurationAdministration as e, type AiAppAssistantConfigurationAuditChange as f, type AiAppAssistantConfigurationAuditEntry as g, type AiAppAssistantConfigurationAuditField as h, type AiAppAssistantConfigurationChangeEvent as i, AiAppAssistantConfigurationConflictError as j, AiAppAssistantConfigurationManager as k, type AiAppAssistantConfigurationManagerOptions as l, type AiAppAssistantConfigurationRepository as m, type AiAppAssistantConfigurationSaveResult as n, type AiAppAssistantConfigurationSynchronizer as o, type AiAppAssistantConfigurationView as p, type AiAppAssistantGenerationEvent as q, type AiAppAssistantGenerationOperation as r, type AiAppAssistantKeyValueStore as s, type AiAppAssistantManagedConfigurationSetup as t, type AiAppAssistantManagedStorage as u, AiAppAssistantManagementError as v, type AiAppAssistantManagementErrorCode as w, type AiAppAssistantQuotaPolicy as x, type AiAppAssistantQuotaResult as y, type AiAppAssistantQuotaStore as z };
540
+ export { createManagedAiAppAssistantFetchHandlers as $, type AiAppAssistant as A, type BuiltInProvider as B, type AiAppAssistantQuotaStore as C, type AiAppAssistantRecentFailure as D, type AiAppAssistantRedisClient as E, type AiAppAssistantRedisQuotaClient as F, type AiAppAssistantRedisTelemetryClient as G, type AiAppAssistantRuntimeIdentity as H, type AiAppAssistantSecretProtector as I, type AiAppAssistantTelemetryStore as J, type AiAppAssistantTelemetrySummary as K, AiModelDiscoveryError as L, type ManagedAiAppAssistantServer as M, type AiModelInfo as N, type AiProviderInfo as O, type CreateAiAppAssistantConfigurationRepositoryOptions as P, type CreateManagedAiAppAssistantRuntimeOptions as Q, type CreateManagedAiAppAssistantServerOptions as R, type ListAiModelsOptions as S, type ManagedAiAppAssistantFetchHandlerOptions as T, type ManagedAiAppAssistantFetchHandlers as U, type ManagedAiAppAssistantRuntime as V, createAes256GcmSecretProtector as W, createAiAppAssistant as X, createAiAppAssistantConfigurationRepository as Y, createAiAppAssistantFailureEvent as Z, createDisabledSecretProtector as _, type AiAppAssistantStreamEvent as a, createManagedAiAppAssistantRuntime as a0, createManagedAiAppAssistantServer as a1, createMemoryAiAppAssistantQuotaStore as a2, createMemoryAiAppAssistantStore as a3, createMemoryAiAppAssistantTelemetryStore as a4, createPollingAiAppAssistantConfigurationSynchronizer as a5, createRedisAiAppAssistantQuotaStore as a6, createRedisAiAppAssistantStore as a7, createRedisAiAppAssistantTelemetryStore as a8, listAiModels as a9, listAiProviders as aa, validateAndSaveAiAppAssistantConfiguration as ab, type AiAppAssistantConfiguration as b, AI_APP_ASSISTANT_PROVIDERS as c, type AiAppAssistantAccessRule as d, type AiAppAssistantConfigurationActor as e, type AiAppAssistantConfigurationAdministration as f, type AiAppAssistantConfigurationAuditChange as g, type AiAppAssistantConfigurationAuditEntry as h, type AiAppAssistantConfigurationAuditField as i, type AiAppAssistantConfigurationChangeEvent as j, AiAppAssistantConfigurationConflictError as k, AiAppAssistantConfigurationManager as l, type AiAppAssistantConfigurationManagerOptions as m, type AiAppAssistantConfigurationRepository as n, type AiAppAssistantConfigurationSaveResult as o, type AiAppAssistantConfigurationSynchronizer as p, type AiAppAssistantConfigurationView as q, type AiAppAssistantGenerationEvent as r, type AiAppAssistantGenerationOperation as s, type AiAppAssistantKeyValueStore as t, type AiAppAssistantManagedConfigurationSetup as u, type AiAppAssistantManagedStorage as v, AiAppAssistantManagementError as w, type AiAppAssistantManagementErrorCode as x, type AiAppAssistantQuotaPolicy as y, type AiAppAssistantQuotaResult as z };
package/dist/nest.cjs CHANGED
@@ -26,6 +26,7 @@ __export(nest_exports, {
26
26
  });
27
27
  module.exports = __toCommonJS(nest_exports);
28
28
  var import_common = require("@nestjs/common");
29
+ var OPENAPI_EXCLUDE_CONTROLLER_METADATA = "swagger/apiExcludeController";
29
30
  var MANAGED_AI_APP_ASSISTANT_SERVER = /* @__PURE__ */ Symbol.for("@123toto/ai-app-assistant-server/managed");
30
31
  function createManagedAiAppAssistantNestModule(options) {
31
32
  const route = options.path?.replace(/^\/+|\/+$/g, "") || "ai-app-assistant";
@@ -43,6 +44,7 @@ function createManagedAiAppAssistantNestModule(options) {
43
44
  (0, import_common.Res)()(ManagedAiAppAssistantNestController.prototype, "handle", 1);
44
45
  const descriptor = Object.getOwnPropertyDescriptor(ManagedAiAppAssistantNestController.prototype, "handle");
45
46
  if (descriptor) (0, import_common.All)(["", "*path"])(ManagedAiAppAssistantNestController.prototype, "handle", descriptor);
47
+ Reflect.defineMetadata(OPENAPI_EXCLUDE_CONTROLLER_METADATA, [true], ManagedAiAppAssistantNestController);
46
48
  (0, import_common.Controller)(route)(ManagedAiAppAssistantNestController);
47
49
  class ManagedAiAppAssistantNestModule {
48
50
  }
package/dist/nest.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/nest.ts"],"sourcesContent":["import {\n All,\n Controller,\n Inject,\n Injectable,\n Module,\n Req,\n Res,\n type DynamicModule,\n type FactoryProvider,\n type ModuleMetadata,\n type Provider\n} from \"@nestjs/common\";\nimport type { ManagedAiAppAssistantServer } from \"./managed-server.js\";\n\n/** Injection token exported so a host can update documents after Swagger bootstrap. */\nexport const MANAGED_AI_APP_ASSISTANT_SERVER = Symbol.for(\"@123toto/ai-app-assistant-server/managed\");\n\nexport interface AiAppAssistantNestRequest {\n method?: string;\n originalUrl?: string;\n url?: string;\n protocol?: string;\n headers: Record<string, string | string[] | undefined>;\n body?: unknown;\n on?(event: string, listener: () => void): unknown;\n off?(event: string, listener: () => void): unknown;\n [key: string]: unknown;\n}\n\nexport interface AiAppAssistantNestResponse {\n statusCode: number;\n setHeader(name: string, value: string): unknown;\n write(chunk: Uint8Array): boolean;\n end(chunk?: string): unknown;\n once?(event: string, listener: () => void): unknown;\n destroyed?: boolean;\n}\n\nexport interface AiAppAssistantNestModuleOptions<\n TRequest extends AiAppAssistantNestRequest = AiAppAssistantNestRequest\n> extends Pick<ModuleMetadata, \"imports\"> {\n /** Nest controller path. The application's global prefix is applied normally. */\n path?: string;\n inject?: FactoryProvider[\"inject\"];\n // Nest factories intentionally accept host-defined constructor signatures.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n useFactory: (...dependencies: any[]) =>\n | AiAppAssistantNestManagedServer<TRequest>\n | Promise<AiAppAssistantNestManagedServer<TRequest>>;\n}\n\n/** Structural server contract avoids leaking framework-internal types across package entry points. */\nexport type AiAppAssistantNestManagedServer<TRequest extends AiAppAssistantNestRequest = AiAppAssistantNestRequest> = Pick<\n ManagedAiAppAssistantServer<{ id: string; label: string }, TRequest>,\n \"fetch\" | \"dispose\"\n>;\n\n/**\n * Creates a dynamic Nest module with one catch-all controller owned by the\n * connector. Consumer applications declare no AI App Assistant endpoints or DTOs.\n */\nexport function createManagedAiAppAssistantNestModule<\n TRequest extends AiAppAssistantNestRequest = AiAppAssistantNestRequest\n>(options: AiAppAssistantNestModuleOptions<TRequest>): DynamicModule {\n const route = options.path?.replace(/^\\/+|\\/+$/g, \"\") || \"ai-app-assistant\";\n\n class ManagedAiAppAssistantNestController {\n public constructor(\n readonly server: AiAppAssistantNestManagedServer<TRequest>\n ) {}\n\n public handle(request: TRequest, response: AiAppAssistantNestResponse): Promise<void> {\n return handleManagedAiAppAssistantNestRequest(this.server, request, response);\n }\n }\n\n Inject(MANAGED_AI_APP_ASSISTANT_SERVER)(ManagedAiAppAssistantNestController, undefined, 0);\n Req()(ManagedAiAppAssistantNestController.prototype, \"handle\", 0);\n Res()(ManagedAiAppAssistantNestController.prototype, \"handle\", 1);\n const descriptor = Object.getOwnPropertyDescriptor(ManagedAiAppAssistantNestController.prototype, \"handle\");\n if (descriptor) All([\"\", \"*path\"])(ManagedAiAppAssistantNestController.prototype, \"handle\", descriptor);\n Controller(route)(ManagedAiAppAssistantNestController);\n\n class ManagedAiAppAssistantNestModule {}\n class ManagedAiAppAssistantNestLifecycle {\n public constructor(readonly server: AiAppAssistantNestManagedServer<TRequest>) {}\n public onApplicationShutdown(): void {\n this.server.dispose();\n }\n }\n Inject(MANAGED_AI_APP_ASSISTANT_SERVER)(ManagedAiAppAssistantNestLifecycle, undefined, 0);\n Injectable()(ManagedAiAppAssistantNestLifecycle);\n const serverProvider: Provider = {\n provide: MANAGED_AI_APP_ASSISTANT_SERVER,\n inject: options.inject ?? [],\n useFactory: options.useFactory\n };\n Module({\n imports: options.imports ?? [],\n controllers: [ManagedAiAppAssistantNestController],\n providers: [serverProvider, ManagedAiAppAssistantNestLifecycle],\n exports: [MANAGED_AI_APP_ASSISTANT_SERVER]\n })(ManagedAiAppAssistantNestModule);\n\n return {\n module: ManagedAiAppAssistantNestModule,\n imports: options.imports ?? [],\n controllers: [ManagedAiAppAssistantNestController],\n providers: [serverProvider, ManagedAiAppAssistantNestLifecycle],\n exports: [MANAGED_AI_APP_ASSISTANT_SERVER]\n };\n}\n\n/** Adapts parsed Nest requests and streamed Fetch responses without Express coupling. */\nexport async function handleManagedAiAppAssistantNestRequest<\n TRequest extends AiAppAssistantNestRequest\n>(\n server: AiAppAssistantNestManagedServer<TRequest>,\n request: TRequest,\n response: AiAppAssistantNestResponse\n): Promise<void> {\n const abortController = new AbortController();\n const abort = (): void => abortController.abort(new DOMException(\"Client disconnected\", \"AbortError\"));\n request.on?.(\"close\", abort);\n try {\n const webRequest = toFetchRequest(request, abortController.signal);\n await writeFetchResponse(response, await server.fetch.handle(webRequest, request));\n } finally {\n request.off?.(\"close\", abort);\n }\n}\n\nfunction toFetchRequest(request: AiAppAssistantNestRequest, signal: AbortSignal): Request {\n const headers = new Headers();\n for (const [name, value] of Object.entries(request.headers)) {\n if (Array.isArray(value)) value.forEach((item) => headers.append(name, item));\n else if (value !== undefined) headers.set(name, value);\n }\n const method = request.method?.toUpperCase() || \"GET\";\n const host = headers.get(\"host\") || \"localhost\";\n const protocol = request.protocol || headers.get(\"x-forwarded-proto\") || \"http\";\n const url = new URL(request.originalUrl || request.url || \"/\", `${protocol}://${host}`);\n const hasBody = method !== \"GET\" && method !== \"HEAD\" && request.body !== undefined;\n return new Request(url, {\n method,\n headers,\n signal,\n ...(hasBody ? { body: serializeBody(request.body, headers) } : {})\n });\n}\n\nfunction serializeBody(body: unknown, headers: Headers): string {\n if (typeof body === \"string\") return body;\n if (body instanceof Uint8Array) return new TextDecoder().decode(body);\n if (!headers.has(\"content-type\")) headers.set(\"content-type\", \"application/json\");\n return JSON.stringify(body);\n}\n\nasync function writeFetchResponse(response: AiAppAssistantNestResponse, result: Response): Promise<void> {\n response.statusCode = result.status;\n result.headers.forEach((value, name) => response.setHeader(name, value));\n if (!result.body) {\n response.end();\n return;\n }\n const reader = result.body.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n if (!response.write(value) && response.once) {\n await new Promise<void>((resolve) => response.once!(\"drain\", resolve));\n }\n }\n if (!response.destroyed) response.end();\n } finally {\n reader.releaseLock();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAYO;AAIA,IAAM,kCAAkC,uBAAO,IAAI,0CAA0C;AA8C7F,SAAS,sCAEd,SAAmE;AACnE,QAAM,QAAQ,QAAQ,MAAM,QAAQ,cAAc,EAAE,KAAK;AAAA,EAEzD,MAAM,oCAAoC;AAAA,IACjC,YACI,QACT;AADS;AAAA,IACR;AAAA,IADQ;AAAA,IAGJ,OAAO,SAAmB,UAAqD;AACpF,aAAO,uCAAuC,KAAK,QAAQ,SAAS,QAAQ;AAAA,IAC9E;AAAA,EACF;AAEA,4BAAO,+BAA+B,EAAE,qCAAqC,QAAW,CAAC;AACzF,yBAAI,EAAE,oCAAoC,WAAW,UAAU,CAAC;AAChE,yBAAI,EAAE,oCAAoC,WAAW,UAAU,CAAC;AAChE,QAAM,aAAa,OAAO,yBAAyB,oCAAoC,WAAW,QAAQ;AAC1G,MAAI,WAAY,wBAAI,CAAC,IAAI,OAAO,CAAC,EAAE,oCAAoC,WAAW,UAAU,UAAU;AACtG,gCAAW,KAAK,EAAE,mCAAmC;AAAA,EAErD,MAAM,gCAAgC;AAAA,EAAC;AAAA,EACvC,MAAM,mCAAmC;AAAA,IAChC,YAAqB,QAAmD;AAAnD;AAAA,IAAoD;AAAA,IAApD;AAAA,IACrB,wBAA8B;AACnC,WAAK,OAAO,QAAQ;AAAA,IACtB;AAAA,EACF;AACA,4BAAO,+BAA+B,EAAE,oCAAoC,QAAW,CAAC;AACxF,gCAAW,EAAE,kCAAkC;AAC/C,QAAM,iBAA2B;AAAA,IAC/B,SAAS;AAAA,IACT,QAAQ,QAAQ,UAAU,CAAC;AAAA,IAC3B,YAAY,QAAQ;AAAA,EACtB;AACA,4BAAO;AAAA,IACL,SAAS,QAAQ,WAAW,CAAC;AAAA,IAC7B,aAAa,CAAC,mCAAmC;AAAA,IACjD,WAAW,CAAC,gBAAgB,kCAAkC;AAAA,IAC9D,SAAS,CAAC,+BAA+B;AAAA,EAC3C,CAAC,EAAE,+BAA+B;AAElC,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,SAAS,QAAQ,WAAW,CAAC;AAAA,IAC7B,aAAa,CAAC,mCAAmC;AAAA,IACjD,WAAW,CAAC,gBAAgB,kCAAkC;AAAA,IAC9D,SAAS,CAAC,+BAA+B;AAAA,EAC3C;AACF;AAGA,eAAsB,uCAGpB,QACA,SACA,UACe;AACf,QAAM,kBAAkB,IAAI,gBAAgB;AAC5C,QAAM,QAAQ,MAAY,gBAAgB,MAAM,IAAI,aAAa,uBAAuB,YAAY,CAAC;AACrG,UAAQ,KAAK,SAAS,KAAK;AAC3B,MAAI;AACF,UAAM,aAAa,eAAe,SAAS,gBAAgB,MAAM;AACjE,UAAM,mBAAmB,UAAU,MAAM,OAAO,MAAM,OAAO,YAAY,OAAO,CAAC;AAAA,EACnF,UAAE;AACA,YAAQ,MAAM,SAAS,KAAK;AAAA,EAC9B;AACF;AAEA,SAAS,eAAe,SAAoC,QAA8B;AACxF,QAAM,UAAU,IAAI,QAAQ;AAC5B,aAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,QAAQ,OAAO,GAAG;AAC3D,QAAI,MAAM,QAAQ,KAAK,EAAG,OAAM,QAAQ,CAAC,SAAS,QAAQ,OAAO,MAAM,IAAI,CAAC;AAAA,aACnE,UAAU,OAAW,SAAQ,IAAI,MAAM,KAAK;AAAA,EACvD;AACA,QAAM,SAAS,QAAQ,QAAQ,YAAY,KAAK;AAChD,QAAM,OAAO,QAAQ,IAAI,MAAM,KAAK;AACpC,QAAM,WAAW,QAAQ,YAAY,QAAQ,IAAI,mBAAmB,KAAK;AACzE,QAAM,MAAM,IAAI,IAAI,QAAQ,eAAe,QAAQ,OAAO,KAAK,GAAG,QAAQ,MAAM,IAAI,EAAE;AACtF,QAAM,UAAU,WAAW,SAAS,WAAW,UAAU,QAAQ,SAAS;AAC1E,SAAO,IAAI,QAAQ,KAAK;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAI,UAAU,EAAE,MAAM,cAAc,QAAQ,MAAM,OAAO,EAAE,IAAI,CAAC;AAAA,EAClE,CAAC;AACH;AAEA,SAAS,cAAc,MAAe,SAA0B;AAC9D,MAAI,OAAO,SAAS,SAAU,QAAO;AACrC,MAAI,gBAAgB,WAAY,QAAO,IAAI,YAAY,EAAE,OAAO,IAAI;AACpE,MAAI,CAAC,QAAQ,IAAI,cAAc,EAAG,SAAQ,IAAI,gBAAgB,kBAAkB;AAChF,SAAO,KAAK,UAAU,IAAI;AAC5B;AAEA,eAAe,mBAAmB,UAAsC,QAAiC;AACvG,WAAS,aAAa,OAAO;AAC7B,SAAO,QAAQ,QAAQ,CAAC,OAAO,SAAS,SAAS,UAAU,MAAM,KAAK,CAAC;AACvE,MAAI,CAAC,OAAO,MAAM;AAChB,aAAS,IAAI;AACb;AAAA,EACF;AACA,QAAM,SAAS,OAAO,KAAK,UAAU;AACrC,MAAI;AACF,WAAO,MAAM;AACX,YAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,UAAI,KAAM;AACV,UAAI,CAAC,SAAS,MAAM,KAAK,KAAK,SAAS,MAAM;AAC3C,cAAM,IAAI,QAAc,CAAC,YAAY,SAAS,KAAM,SAAS,OAAO,CAAC;AAAA,MACvE;AAAA,IACF;AACA,QAAI,CAAC,SAAS,UAAW,UAAS,IAAI;AAAA,EACxC,UAAE;AACA,WAAO,YAAY;AAAA,EACrB;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/nest.ts"],"sourcesContent":["import {\n All,\n Controller,\n Inject,\n Injectable,\n Module,\n Req,\n Res,\n type DynamicModule,\n type FactoryProvider,\n type ModuleMetadata,\n type Provider\n} from \"@nestjs/common\";\nimport type { ManagedAiAppAssistantServer } from \"./managed-server.js\";\n\n// Same metadata key used by @nestjs/swagger's ApiExcludeController decorator.\n// Keeping it local avoids making Swagger a dependency of the optional Nest connector.\nconst OPENAPI_EXCLUDE_CONTROLLER_METADATA = \"swagger/apiExcludeController\";\n\n/** Injection token exported so a host can update documents after Swagger bootstrap. */\nexport const MANAGED_AI_APP_ASSISTANT_SERVER = Symbol.for(\"@123toto/ai-app-assistant-server/managed\");\n\nexport interface AiAppAssistantNestRequest {\n method?: string;\n originalUrl?: string;\n url?: string;\n protocol?: string;\n headers: Record<string, string | string[] | undefined>;\n body?: unknown;\n on?(event: string, listener: () => void): unknown;\n off?(event: string, listener: () => void): unknown;\n [key: string]: unknown;\n}\n\nexport interface AiAppAssistantNestResponse {\n statusCode: number;\n setHeader(name: string, value: string): unknown;\n write(chunk: Uint8Array): boolean;\n end(chunk?: string): unknown;\n once?(event: string, listener: () => void): unknown;\n destroyed?: boolean;\n}\n\nexport interface AiAppAssistantNestModuleOptions<\n TRequest extends AiAppAssistantNestRequest = AiAppAssistantNestRequest\n> extends Pick<ModuleMetadata, \"imports\"> {\n /** Nest controller path. The application's global prefix is applied normally. */\n path?: string;\n inject?: FactoryProvider[\"inject\"];\n // Nest factories intentionally accept host-defined constructor signatures.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n useFactory: (...dependencies: any[]) =>\n | AiAppAssistantNestManagedServer<TRequest>\n | Promise<AiAppAssistantNestManagedServer<TRequest>>;\n}\n\n/** Structural server contract avoids leaking framework-internal types across package entry points. */\nexport type AiAppAssistantNestManagedServer<TRequest extends AiAppAssistantNestRequest = AiAppAssistantNestRequest> = Pick<\n ManagedAiAppAssistantServer<{ id: string; label: string }, TRequest>,\n \"fetch\" | \"dispose\"\n>;\n\n/**\n * Creates a dynamic Nest module with one catch-all controller owned by the\n * connector. Consumer applications declare no AI App Assistant endpoints or DTOs.\n */\nexport function createManagedAiAppAssistantNestModule<\n TRequest extends AiAppAssistantNestRequest = AiAppAssistantNestRequest\n>(options: AiAppAssistantNestModuleOptions<TRequest>): DynamicModule {\n const route = options.path?.replace(/^\\/+|\\/+$/g, \"\") || \"ai-app-assistant\";\n\n class ManagedAiAppAssistantNestController {\n public constructor(\n readonly server: AiAppAssistantNestManagedServer<TRequest>\n ) {}\n\n public handle(request: TRequest, response: AiAppAssistantNestResponse): Promise<void> {\n return handleManagedAiAppAssistantNestRequest(this.server, request, response);\n }\n }\n\n Inject(MANAGED_AI_APP_ASSISTANT_SERVER)(ManagedAiAppAssistantNestController, undefined, 0);\n Req()(ManagedAiAppAssistantNestController.prototype, \"handle\", 0);\n Res()(ManagedAiAppAssistantNestController.prototype, \"handle\", 1);\n const descriptor = Object.getOwnPropertyDescriptor(ManagedAiAppAssistantNestController.prototype, \"handle\");\n if (descriptor) All([\"\", \"*path\"])(ManagedAiAppAssistantNestController.prototype, \"handle\", descriptor);\n // A catch-all Nest route is exposed as the non-standard HTTP verb `all` by\n // Swagger. Exclude this transport controller so it cannot invalidate the\n // consuming application's OpenAPI document.\n Reflect.defineMetadata(OPENAPI_EXCLUDE_CONTROLLER_METADATA, [true], ManagedAiAppAssistantNestController);\n Controller(route)(ManagedAiAppAssistantNestController);\n\n class ManagedAiAppAssistantNestModule {}\n class ManagedAiAppAssistantNestLifecycle {\n public constructor(readonly server: AiAppAssistantNestManagedServer<TRequest>) {}\n public onApplicationShutdown(): void {\n this.server.dispose();\n }\n }\n Inject(MANAGED_AI_APP_ASSISTANT_SERVER)(ManagedAiAppAssistantNestLifecycle, undefined, 0);\n Injectable()(ManagedAiAppAssistantNestLifecycle);\n const serverProvider: Provider = {\n provide: MANAGED_AI_APP_ASSISTANT_SERVER,\n inject: options.inject ?? [],\n useFactory: options.useFactory\n };\n Module({\n imports: options.imports ?? [],\n controllers: [ManagedAiAppAssistantNestController],\n providers: [serverProvider, ManagedAiAppAssistantNestLifecycle],\n exports: [MANAGED_AI_APP_ASSISTANT_SERVER]\n })(ManagedAiAppAssistantNestModule);\n\n return {\n module: ManagedAiAppAssistantNestModule,\n imports: options.imports ?? [],\n controllers: [ManagedAiAppAssistantNestController],\n providers: [serverProvider, ManagedAiAppAssistantNestLifecycle],\n exports: [MANAGED_AI_APP_ASSISTANT_SERVER]\n };\n}\n\n/** Adapts parsed Nest requests and streamed Fetch responses without Express coupling. */\nexport async function handleManagedAiAppAssistantNestRequest<\n TRequest extends AiAppAssistantNestRequest\n>(\n server: AiAppAssistantNestManagedServer<TRequest>,\n request: TRequest,\n response: AiAppAssistantNestResponse\n): Promise<void> {\n const abortController = new AbortController();\n const abort = (): void => abortController.abort(new DOMException(\"Client disconnected\", \"AbortError\"));\n request.on?.(\"close\", abort);\n try {\n const webRequest = toFetchRequest(request, abortController.signal);\n await writeFetchResponse(response, await server.fetch.handle(webRequest, request));\n } finally {\n request.off?.(\"close\", abort);\n }\n}\n\nfunction toFetchRequest(request: AiAppAssistantNestRequest, signal: AbortSignal): Request {\n const headers = new Headers();\n for (const [name, value] of Object.entries(request.headers)) {\n if (Array.isArray(value)) value.forEach((item) => headers.append(name, item));\n else if (value !== undefined) headers.set(name, value);\n }\n const method = request.method?.toUpperCase() || \"GET\";\n const host = headers.get(\"host\") || \"localhost\";\n const protocol = request.protocol || headers.get(\"x-forwarded-proto\") || \"http\";\n const url = new URL(request.originalUrl || request.url || \"/\", `${protocol}://${host}`);\n const hasBody = method !== \"GET\" && method !== \"HEAD\" && request.body !== undefined;\n return new Request(url, {\n method,\n headers,\n signal,\n ...(hasBody ? { body: serializeBody(request.body, headers) } : {})\n });\n}\n\nfunction serializeBody(body: unknown, headers: Headers): string {\n if (typeof body === \"string\") return body;\n if (body instanceof Uint8Array) return new TextDecoder().decode(body);\n if (!headers.has(\"content-type\")) headers.set(\"content-type\", \"application/json\");\n return JSON.stringify(body);\n}\n\nasync function writeFetchResponse(response: AiAppAssistantNestResponse, result: Response): Promise<void> {\n response.statusCode = result.status;\n result.headers.forEach((value, name) => response.setHeader(name, value));\n if (!result.body) {\n response.end();\n return;\n }\n const reader = result.body.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n if (!response.write(value) && response.once) {\n await new Promise<void>((resolve) => response.once!(\"drain\", resolve));\n }\n }\n if (!response.destroyed) response.end();\n } finally {\n reader.releaseLock();\n }\n}\n"],"mappings":"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","names":[]}
package/dist/nest.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { ModuleMetadata, FactoryProvider, DynamicModule } from '@nestjs/common';
2
- import { M as ManagedAiAppAssistantServer } from './managed-server-CQb-RK-i.cjs';
2
+ import { M as ManagedAiAppAssistantServer } from './managed-server-wXfu_9rp.cjs';
3
3
  import './ai-sdk-qU3KgNu-.cjs';
4
4
  import 'ai';
5
5
  import '@123toto/ai-app-assistant-contracts';
package/dist/nest.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { ModuleMetadata, FactoryProvider, DynamicModule } from '@nestjs/common';
2
- import { M as ManagedAiAppAssistantServer } from './managed-server-CGmvVYsF.js';
2
+ import { M as ManagedAiAppAssistantServer } from './managed-server-CusQWWBB.js';
3
3
  import './ai-sdk-qU3KgNu-.js';
4
4
  import 'ai';
5
5
  import '@123toto/ai-app-assistant-contracts';
package/dist/nest.js CHANGED
@@ -8,6 +8,7 @@ import {
8
8
  Req,
9
9
  Res
10
10
  } from "@nestjs/common";
11
+ var OPENAPI_EXCLUDE_CONTROLLER_METADATA = "swagger/apiExcludeController";
11
12
  var MANAGED_AI_APP_ASSISTANT_SERVER = /* @__PURE__ */ Symbol.for("@123toto/ai-app-assistant-server/managed");
12
13
  function createManagedAiAppAssistantNestModule(options) {
13
14
  const route = options.path?.replace(/^\/+|\/+$/g, "") || "ai-app-assistant";
@@ -25,6 +26,7 @@ function createManagedAiAppAssistantNestModule(options) {
25
26
  Res()(ManagedAiAppAssistantNestController.prototype, "handle", 1);
26
27
  const descriptor = Object.getOwnPropertyDescriptor(ManagedAiAppAssistantNestController.prototype, "handle");
27
28
  if (descriptor) All(["", "*path"])(ManagedAiAppAssistantNestController.prototype, "handle", descriptor);
29
+ Reflect.defineMetadata(OPENAPI_EXCLUDE_CONTROLLER_METADATA, [true], ManagedAiAppAssistantNestController);
28
30
  Controller(route)(ManagedAiAppAssistantNestController);
29
31
  class ManagedAiAppAssistantNestModule {
30
32
  }
package/dist/nest.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/nest.ts"],"sourcesContent":["import {\n All,\n Controller,\n Inject,\n Injectable,\n Module,\n Req,\n Res,\n type DynamicModule,\n type FactoryProvider,\n type ModuleMetadata,\n type Provider\n} from \"@nestjs/common\";\nimport type { ManagedAiAppAssistantServer } from \"./managed-server.js\";\n\n/** Injection token exported so a host can update documents after Swagger bootstrap. */\nexport const MANAGED_AI_APP_ASSISTANT_SERVER = Symbol.for(\"@123toto/ai-app-assistant-server/managed\");\n\nexport interface AiAppAssistantNestRequest {\n method?: string;\n originalUrl?: string;\n url?: string;\n protocol?: string;\n headers: Record<string, string | string[] | undefined>;\n body?: unknown;\n on?(event: string, listener: () => void): unknown;\n off?(event: string, listener: () => void): unknown;\n [key: string]: unknown;\n}\n\nexport interface AiAppAssistantNestResponse {\n statusCode: number;\n setHeader(name: string, value: string): unknown;\n write(chunk: Uint8Array): boolean;\n end(chunk?: string): unknown;\n once?(event: string, listener: () => void): unknown;\n destroyed?: boolean;\n}\n\nexport interface AiAppAssistantNestModuleOptions<\n TRequest extends AiAppAssistantNestRequest = AiAppAssistantNestRequest\n> extends Pick<ModuleMetadata, \"imports\"> {\n /** Nest controller path. The application's global prefix is applied normally. */\n path?: string;\n inject?: FactoryProvider[\"inject\"];\n // Nest factories intentionally accept host-defined constructor signatures.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n useFactory: (...dependencies: any[]) =>\n | AiAppAssistantNestManagedServer<TRequest>\n | Promise<AiAppAssistantNestManagedServer<TRequest>>;\n}\n\n/** Structural server contract avoids leaking framework-internal types across package entry points. */\nexport type AiAppAssistantNestManagedServer<TRequest extends AiAppAssistantNestRequest = AiAppAssistantNestRequest> = Pick<\n ManagedAiAppAssistantServer<{ id: string; label: string }, TRequest>,\n \"fetch\" | \"dispose\"\n>;\n\n/**\n * Creates a dynamic Nest module with one catch-all controller owned by the\n * connector. Consumer applications declare no AI App Assistant endpoints or DTOs.\n */\nexport function createManagedAiAppAssistantNestModule<\n TRequest extends AiAppAssistantNestRequest = AiAppAssistantNestRequest\n>(options: AiAppAssistantNestModuleOptions<TRequest>): DynamicModule {\n const route = options.path?.replace(/^\\/+|\\/+$/g, \"\") || \"ai-app-assistant\";\n\n class ManagedAiAppAssistantNestController {\n public constructor(\n readonly server: AiAppAssistantNestManagedServer<TRequest>\n ) {}\n\n public handle(request: TRequest, response: AiAppAssistantNestResponse): Promise<void> {\n return handleManagedAiAppAssistantNestRequest(this.server, request, response);\n }\n }\n\n Inject(MANAGED_AI_APP_ASSISTANT_SERVER)(ManagedAiAppAssistantNestController, undefined, 0);\n Req()(ManagedAiAppAssistantNestController.prototype, \"handle\", 0);\n Res()(ManagedAiAppAssistantNestController.prototype, \"handle\", 1);\n const descriptor = Object.getOwnPropertyDescriptor(ManagedAiAppAssistantNestController.prototype, \"handle\");\n if (descriptor) All([\"\", \"*path\"])(ManagedAiAppAssistantNestController.prototype, \"handle\", descriptor);\n Controller(route)(ManagedAiAppAssistantNestController);\n\n class ManagedAiAppAssistantNestModule {}\n class ManagedAiAppAssistantNestLifecycle {\n public constructor(readonly server: AiAppAssistantNestManagedServer<TRequest>) {}\n public onApplicationShutdown(): void {\n this.server.dispose();\n }\n }\n Inject(MANAGED_AI_APP_ASSISTANT_SERVER)(ManagedAiAppAssistantNestLifecycle, undefined, 0);\n Injectable()(ManagedAiAppAssistantNestLifecycle);\n const serverProvider: Provider = {\n provide: MANAGED_AI_APP_ASSISTANT_SERVER,\n inject: options.inject ?? [],\n useFactory: options.useFactory\n };\n Module({\n imports: options.imports ?? [],\n controllers: [ManagedAiAppAssistantNestController],\n providers: [serverProvider, ManagedAiAppAssistantNestLifecycle],\n exports: [MANAGED_AI_APP_ASSISTANT_SERVER]\n })(ManagedAiAppAssistantNestModule);\n\n return {\n module: ManagedAiAppAssistantNestModule,\n imports: options.imports ?? [],\n controllers: [ManagedAiAppAssistantNestController],\n providers: [serverProvider, ManagedAiAppAssistantNestLifecycle],\n exports: [MANAGED_AI_APP_ASSISTANT_SERVER]\n };\n}\n\n/** Adapts parsed Nest requests and streamed Fetch responses without Express coupling. */\nexport async function handleManagedAiAppAssistantNestRequest<\n TRequest extends AiAppAssistantNestRequest\n>(\n server: AiAppAssistantNestManagedServer<TRequest>,\n request: TRequest,\n response: AiAppAssistantNestResponse\n): Promise<void> {\n const abortController = new AbortController();\n const abort = (): void => abortController.abort(new DOMException(\"Client disconnected\", \"AbortError\"));\n request.on?.(\"close\", abort);\n try {\n const webRequest = toFetchRequest(request, abortController.signal);\n await writeFetchResponse(response, await server.fetch.handle(webRequest, request));\n } finally {\n request.off?.(\"close\", abort);\n }\n}\n\nfunction toFetchRequest(request: AiAppAssistantNestRequest, signal: AbortSignal): Request {\n const headers = new Headers();\n for (const [name, value] of Object.entries(request.headers)) {\n if (Array.isArray(value)) value.forEach((item) => headers.append(name, item));\n else if (value !== undefined) headers.set(name, value);\n }\n const method = request.method?.toUpperCase() || \"GET\";\n const host = headers.get(\"host\") || \"localhost\";\n const protocol = request.protocol || headers.get(\"x-forwarded-proto\") || \"http\";\n const url = new URL(request.originalUrl || request.url || \"/\", `${protocol}://${host}`);\n const hasBody = method !== \"GET\" && method !== \"HEAD\" && request.body !== undefined;\n return new Request(url, {\n method,\n headers,\n signal,\n ...(hasBody ? { body: serializeBody(request.body, headers) } : {})\n });\n}\n\nfunction serializeBody(body: unknown, headers: Headers): string {\n if (typeof body === \"string\") return body;\n if (body instanceof Uint8Array) return new TextDecoder().decode(body);\n if (!headers.has(\"content-type\")) headers.set(\"content-type\", \"application/json\");\n return JSON.stringify(body);\n}\n\nasync function writeFetchResponse(response: AiAppAssistantNestResponse, result: Response): Promise<void> {\n response.statusCode = result.status;\n result.headers.forEach((value, name) => response.setHeader(name, value));\n if (!result.body) {\n response.end();\n return;\n }\n const reader = result.body.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n if (!response.write(value) && response.once) {\n await new Promise<void>((resolve) => response.once!(\"drain\", resolve));\n }\n }\n if (!response.destroyed) response.end();\n } finally {\n reader.releaseLock();\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/nest.ts"],"sourcesContent":["import {\n All,\n Controller,\n Inject,\n Injectable,\n Module,\n Req,\n Res,\n type DynamicModule,\n type FactoryProvider,\n type ModuleMetadata,\n type Provider\n} from \"@nestjs/common\";\nimport type { ManagedAiAppAssistantServer } from \"./managed-server.js\";\n\n// Same metadata key used by @nestjs/swagger's ApiExcludeController decorator.\n// Keeping it local avoids making Swagger a dependency of the optional Nest connector.\nconst OPENAPI_EXCLUDE_CONTROLLER_METADATA = \"swagger/apiExcludeController\";\n\n/** Injection token exported so a host can update documents after Swagger bootstrap. */\nexport const MANAGED_AI_APP_ASSISTANT_SERVER = Symbol.for(\"@123toto/ai-app-assistant-server/managed\");\n\nexport interface AiAppAssistantNestRequest {\n method?: string;\n originalUrl?: string;\n url?: string;\n protocol?: string;\n headers: Record<string, string | string[] | undefined>;\n body?: unknown;\n on?(event: string, listener: () => void): unknown;\n off?(event: string, listener: () => void): unknown;\n [key: string]: unknown;\n}\n\nexport interface AiAppAssistantNestResponse {\n statusCode: number;\n setHeader(name: string, value: string): unknown;\n write(chunk: Uint8Array): boolean;\n end(chunk?: string): unknown;\n once?(event: string, listener: () => void): unknown;\n destroyed?: boolean;\n}\n\nexport interface AiAppAssistantNestModuleOptions<\n TRequest extends AiAppAssistantNestRequest = AiAppAssistantNestRequest\n> extends Pick<ModuleMetadata, \"imports\"> {\n /** Nest controller path. The application's global prefix is applied normally. */\n path?: string;\n inject?: FactoryProvider[\"inject\"];\n // Nest factories intentionally accept host-defined constructor signatures.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n useFactory: (...dependencies: any[]) =>\n | AiAppAssistantNestManagedServer<TRequest>\n | Promise<AiAppAssistantNestManagedServer<TRequest>>;\n}\n\n/** Structural server contract avoids leaking framework-internal types across package entry points. */\nexport type AiAppAssistantNestManagedServer<TRequest extends AiAppAssistantNestRequest = AiAppAssistantNestRequest> = Pick<\n ManagedAiAppAssistantServer<{ id: string; label: string }, TRequest>,\n \"fetch\" | \"dispose\"\n>;\n\n/**\n * Creates a dynamic Nest module with one catch-all controller owned by the\n * connector. Consumer applications declare no AI App Assistant endpoints or DTOs.\n */\nexport function createManagedAiAppAssistantNestModule<\n TRequest extends AiAppAssistantNestRequest = AiAppAssistantNestRequest\n>(options: AiAppAssistantNestModuleOptions<TRequest>): DynamicModule {\n const route = options.path?.replace(/^\\/+|\\/+$/g, \"\") || \"ai-app-assistant\";\n\n class ManagedAiAppAssistantNestController {\n public constructor(\n readonly server: AiAppAssistantNestManagedServer<TRequest>\n ) {}\n\n public handle(request: TRequest, response: AiAppAssistantNestResponse): Promise<void> {\n return handleManagedAiAppAssistantNestRequest(this.server, request, response);\n }\n }\n\n Inject(MANAGED_AI_APP_ASSISTANT_SERVER)(ManagedAiAppAssistantNestController, undefined, 0);\n Req()(ManagedAiAppAssistantNestController.prototype, \"handle\", 0);\n Res()(ManagedAiAppAssistantNestController.prototype, \"handle\", 1);\n const descriptor = Object.getOwnPropertyDescriptor(ManagedAiAppAssistantNestController.prototype, \"handle\");\n if (descriptor) All([\"\", \"*path\"])(ManagedAiAppAssistantNestController.prototype, \"handle\", descriptor);\n // A catch-all Nest route is exposed as the non-standard HTTP verb `all` by\n // Swagger. Exclude this transport controller so it cannot invalidate the\n // consuming application's OpenAPI document.\n Reflect.defineMetadata(OPENAPI_EXCLUDE_CONTROLLER_METADATA, [true], ManagedAiAppAssistantNestController);\n Controller(route)(ManagedAiAppAssistantNestController);\n\n class ManagedAiAppAssistantNestModule {}\n class ManagedAiAppAssistantNestLifecycle {\n public constructor(readonly server: AiAppAssistantNestManagedServer<TRequest>) {}\n public onApplicationShutdown(): void {\n this.server.dispose();\n }\n }\n Inject(MANAGED_AI_APP_ASSISTANT_SERVER)(ManagedAiAppAssistantNestLifecycle, undefined, 0);\n Injectable()(ManagedAiAppAssistantNestLifecycle);\n const serverProvider: Provider = {\n provide: MANAGED_AI_APP_ASSISTANT_SERVER,\n inject: options.inject ?? [],\n useFactory: options.useFactory\n };\n Module({\n imports: options.imports ?? [],\n controllers: [ManagedAiAppAssistantNestController],\n providers: [serverProvider, ManagedAiAppAssistantNestLifecycle],\n exports: [MANAGED_AI_APP_ASSISTANT_SERVER]\n })(ManagedAiAppAssistantNestModule);\n\n return {\n module: ManagedAiAppAssistantNestModule,\n imports: options.imports ?? [],\n controllers: [ManagedAiAppAssistantNestController],\n providers: [serverProvider, ManagedAiAppAssistantNestLifecycle],\n exports: [MANAGED_AI_APP_ASSISTANT_SERVER]\n };\n}\n\n/** Adapts parsed Nest requests and streamed Fetch responses without Express coupling. */\nexport async function handleManagedAiAppAssistantNestRequest<\n TRequest extends AiAppAssistantNestRequest\n>(\n server: AiAppAssistantNestManagedServer<TRequest>,\n request: TRequest,\n response: AiAppAssistantNestResponse\n): Promise<void> {\n const abortController = new AbortController();\n const abort = (): void => abortController.abort(new DOMException(\"Client disconnected\", \"AbortError\"));\n request.on?.(\"close\", abort);\n try {\n const webRequest = toFetchRequest(request, abortController.signal);\n await writeFetchResponse(response, await server.fetch.handle(webRequest, request));\n } finally {\n request.off?.(\"close\", abort);\n }\n}\n\nfunction toFetchRequest(request: AiAppAssistantNestRequest, signal: AbortSignal): Request {\n const headers = new Headers();\n for (const [name, value] of Object.entries(request.headers)) {\n if (Array.isArray(value)) value.forEach((item) => headers.append(name, item));\n else if (value !== undefined) headers.set(name, value);\n }\n const method = request.method?.toUpperCase() || \"GET\";\n const host = headers.get(\"host\") || \"localhost\";\n const protocol = request.protocol || headers.get(\"x-forwarded-proto\") || \"http\";\n const url = new URL(request.originalUrl || request.url || \"/\", `${protocol}://${host}`);\n const hasBody = method !== \"GET\" && method !== \"HEAD\" && request.body !== undefined;\n return new Request(url, {\n method,\n headers,\n signal,\n ...(hasBody ? { body: serializeBody(request.body, headers) } : {})\n });\n}\n\nfunction serializeBody(body: unknown, headers: Headers): string {\n if (typeof body === \"string\") return body;\n if (body instanceof Uint8Array) return new TextDecoder().decode(body);\n if (!headers.has(\"content-type\")) headers.set(\"content-type\", \"application/json\");\n return JSON.stringify(body);\n}\n\nasync function writeFetchResponse(response: AiAppAssistantNestResponse, result: Response): Promise<void> {\n response.statusCode = result.status;\n result.headers.forEach((value, name) => response.setHeader(name, value));\n if (!result.body) {\n response.end();\n return;\n }\n const reader = result.body.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n if (!response.write(value) && response.once) {\n await new Promise<void>((resolve) => response.once!(\"drain\", resolve));\n }\n }\n if (!response.destroyed) response.end();\n } finally {\n reader.releaseLock();\n }\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@123toto/ai-app-assistant-server",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "license": "MIT",
5
5
  "description": "Framework-neutral Node.js backend for contextual in-app AI assistants",
6
6
  "engines": {
@@ -77,7 +77,7 @@
77
77
  "@ai-sdk/openai": "^3.0.0",
78
78
  "ai": "^6.0.0",
79
79
  "zod": "^4.0.0",
80
- "@123toto/ai-app-assistant-contracts": "0.2.1"
80
+ "@123toto/ai-app-assistant-contracts": "0.2.3"
81
81
  },
82
82
  "devDependencies": {
83
83
  "@nestjs/common": "~11.1.29",