@lssm/lib.contracts 0.0.0-canary-20251120170226
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/README.md +98 -0
- package/dist/app-config/branding.d.ts +56 -0
- package/dist/app-config/branding.d.ts.map +1 -0
- package/dist/app-config/branding.js +0 -0
- package/dist/app-config/contracts.d.ts +245 -0
- package/dist/app-config/contracts.d.ts.map +1 -0
- package/dist/app-config/contracts.js +2 -0
- package/dist/app-config/contracts.js.map +1 -0
- package/dist/app-config/events.d.ts +123 -0
- package/dist/app-config/events.d.ts.map +1 -0
- package/dist/app-config/events.js +2 -0
- package/dist/app-config/events.js.map +1 -0
- package/dist/app-config/index.d.ts +8 -0
- package/dist/app-config/index.js +1 -0
- package/dist/app-config/lifecycle-contracts.d.ts +383 -0
- package/dist/app-config/lifecycle-contracts.d.ts.map +1 -0
- package/dist/app-config/lifecycle-contracts.js +2 -0
- package/dist/app-config/lifecycle-contracts.js.map +1 -0
- package/dist/app-config/lifecycle.d.ts +28 -0
- package/dist/app-config/lifecycle.d.ts.map +1 -0
- package/dist/app-config/lifecycle.js +0 -0
- package/dist/app-config/runtime.d.ts +115 -0
- package/dist/app-config/runtime.d.ts.map +1 -0
- package/dist/app-config/runtime.js +2 -0
- package/dist/app-config/runtime.js.map +1 -0
- package/dist/app-config/spec.d.ts +176 -0
- package/dist/app-config/spec.d.ts.map +1 -0
- package/dist/app-config/spec.js +2 -0
- package/dist/app-config/spec.js.map +1 -0
- package/dist/app-config/validation.d.ts +48 -0
- package/dist/app-config/validation.d.ts.map +1 -0
- package/dist/app-config/validation.js +2 -0
- package/dist/app-config/validation.js.map +1 -0
- package/dist/capabilities/openbanking.d.ts +10 -0
- package/dist/capabilities/openbanking.d.ts.map +1 -0
- package/dist/capabilities/openbanking.js +2 -0
- package/dist/capabilities/openbanking.js.map +1 -0
- package/dist/capabilities.d.ts +45 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +2 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/client/index.d.ts +6 -0
- package/dist/client/index.js +1 -0
- package/dist/client/react/drivers/rn-reusables.d.ts +23 -0
- package/dist/client/react/drivers/rn-reusables.d.ts.map +1 -0
- package/dist/client/react/drivers/rn-reusables.js +2 -0
- package/dist/client/react/drivers/rn-reusables.js.map +1 -0
- package/dist/client/react/drivers/shadcn.d.ts +13 -0
- package/dist/client/react/drivers/shadcn.d.ts.map +1 -0
- package/dist/client/react/drivers/shadcn.js +2 -0
- package/dist/client/react/drivers/shadcn.js.map +1 -0
- package/dist/client/react/feature-render.d.ts +21 -0
- package/dist/client/react/feature-render.d.ts.map +1 -0
- package/dist/client/react/feature-render.js +2 -0
- package/dist/client/react/feature-render.js.map +1 -0
- package/dist/client/react/form-render.d.ts +92 -0
- package/dist/client/react/form-render.d.ts.map +1 -0
- package/dist/client/react/form-render.js +2 -0
- package/dist/client/react/form-render.js.map +1 -0
- package/dist/client/react/index.d.ts +5 -0
- package/dist/client/react/index.js +1 -0
- package/dist/contracts-adapter-hydration.d.ts +16 -0
- package/dist/contracts-adapter-hydration.d.ts.map +1 -0
- package/dist/contracts-adapter-hydration.js +2 -0
- package/dist/contracts-adapter-hydration.js.map +1 -0
- package/dist/contracts-adapter-input.d.ts +11 -0
- package/dist/contracts-adapter-input.d.ts.map +1 -0
- package/dist/contracts-adapter-input.js +2 -0
- package/dist/contracts-adapter-input.js.map +1 -0
- package/dist/data-views/query-generator.d.ts +40 -0
- package/dist/data-views/query-generator.d.ts.map +1 -0
- package/dist/data-views/query-generator.js +2 -0
- package/dist/data-views/query-generator.js.map +1 -0
- package/dist/data-views/runtime.d.ts +27 -0
- package/dist/data-views/runtime.d.ts.map +1 -0
- package/dist/data-views/runtime.js +2 -0
- package/dist/data-views/runtime.js.map +1 -0
- package/dist/data-views.d.ts +132 -0
- package/dist/data-views.d.ts.map +1 -0
- package/dist/data-views.js +2 -0
- package/dist/data-views.js.map +1 -0
- package/dist/events.d.ts +45 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +2 -0
- package/dist/events.js.map +1 -0
- package/dist/experiments/evaluator.d.ts +38 -0
- package/dist/experiments/evaluator.d.ts.map +1 -0
- package/dist/experiments/evaluator.js +2 -0
- package/dist/experiments/evaluator.js.map +1 -0
- package/dist/experiments/spec.d.ts +90 -0
- package/dist/experiments/spec.d.ts.map +1 -0
- package/dist/experiments/spec.js +2 -0
- package/dist/experiments/spec.js.map +1 -0
- package/dist/features.d.ts +88 -0
- package/dist/features.d.ts.map +1 -0
- package/dist/features.js +2 -0
- package/dist/features.js.map +1 -0
- package/dist/forms.d.ts +259 -0
- package/dist/forms.d.ts.map +1 -0
- package/dist/forms.js +2 -0
- package/dist/forms.js.map +1 -0
- package/dist/graphql-federation/dist/index.js +2 -0
- package/dist/graphql-federation/dist/index.js.map +1 -0
- package/dist/index.d.ts +129 -0
- package/dist/index.js +1 -0
- package/dist/install.d.ts +77 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +2 -0
- package/dist/install.js.map +1 -0
- package/dist/integrations/binding.d.ts +18 -0
- package/dist/integrations/binding.d.ts.map +1 -0
- package/dist/integrations/binding.js +0 -0
- package/dist/integrations/connection.d.ts +52 -0
- package/dist/integrations/connection.d.ts.map +1 -0
- package/dist/integrations/connection.js +0 -0
- package/dist/integrations/contracts.d.ts +436 -0
- package/dist/integrations/contracts.d.ts.map +1 -0
- package/dist/integrations/contracts.js +2 -0
- package/dist/integrations/contracts.js.map +1 -0
- package/dist/integrations/health.d.ts +22 -0
- package/dist/integrations/health.d.ts.map +1 -0
- package/dist/integrations/health.js +2 -0
- package/dist/integrations/health.js.map +1 -0
- package/dist/integrations/index.d.ts +53 -0
- package/dist/integrations/index.js +1 -0
- package/dist/integrations/openbanking/contracts/accounts.d.ts +288 -0
- package/dist/integrations/openbanking/contracts/accounts.d.ts.map +1 -0
- package/dist/integrations/openbanking/contracts/accounts.js +2 -0
- package/dist/integrations/openbanking/contracts/accounts.js.map +1 -0
- package/dist/integrations/openbanking/contracts/balances.d.ts +164 -0
- package/dist/integrations/openbanking/contracts/balances.d.ts.map +1 -0
- package/dist/integrations/openbanking/contracts/balances.js +2 -0
- package/dist/integrations/openbanking/contracts/balances.js.map +1 -0
- package/dist/integrations/openbanking/contracts/index.d.ts +10 -0
- package/dist/integrations/openbanking/contracts/index.d.ts.map +1 -0
- package/dist/integrations/openbanking/contracts/index.js +2 -0
- package/dist/integrations/openbanking/contracts/index.js.map +1 -0
- package/dist/integrations/openbanking/contracts/transactions.d.ts +212 -0
- package/dist/integrations/openbanking/contracts/transactions.d.ts.map +1 -0
- package/dist/integrations/openbanking/contracts/transactions.js +2 -0
- package/dist/integrations/openbanking/contracts/transactions.js.map +1 -0
- package/dist/integrations/openbanking/guards.d.ts +13 -0
- package/dist/integrations/openbanking/guards.d.ts.map +1 -0
- package/dist/integrations/openbanking/guards.js +2 -0
- package/dist/integrations/openbanking/guards.js.map +1 -0
- package/dist/integrations/openbanking/models.d.ts +229 -0
- package/dist/integrations/openbanking/models.d.ts.map +1 -0
- package/dist/integrations/openbanking/models.js +2 -0
- package/dist/integrations/openbanking/models.js.map +1 -0
- package/dist/integrations/openbanking/telemetry.d.ts +16 -0
- package/dist/integrations/openbanking/telemetry.d.ts.map +1 -0
- package/dist/integrations/openbanking/telemetry.js +2 -0
- package/dist/integrations/openbanking/telemetry.js.map +1 -0
- package/dist/integrations/providers/calendar.d.ts +79 -0
- package/dist/integrations/providers/calendar.d.ts.map +1 -0
- package/dist/integrations/providers/calendar.js +0 -0
- package/dist/integrations/providers/elevenlabs.d.ts +8 -0
- package/dist/integrations/providers/elevenlabs.d.ts.map +1 -0
- package/dist/integrations/providers/elevenlabs.js +2 -0
- package/dist/integrations/providers/elevenlabs.js.map +1 -0
- package/dist/integrations/providers/email.d.ts +87 -0
- package/dist/integrations/providers/email.d.ts.map +1 -0
- package/dist/integrations/providers/email.js +0 -0
- package/dist/integrations/providers/embedding.d.ts +25 -0
- package/dist/integrations/providers/embedding.d.ts.map +1 -0
- package/dist/integrations/providers/embedding.js +0 -0
- package/dist/integrations/providers/gcs-storage.d.ts +8 -0
- package/dist/integrations/providers/gcs-storage.d.ts.map +1 -0
- package/dist/integrations/providers/gcs-storage.js +2 -0
- package/dist/integrations/providers/gcs-storage.js.map +1 -0
- package/dist/integrations/providers/gmail.d.ts +8 -0
- package/dist/integrations/providers/gmail.d.ts.map +1 -0
- package/dist/integrations/providers/gmail.js +2 -0
- package/dist/integrations/providers/gmail.js.map +1 -0
- package/dist/integrations/providers/google-calendar.d.ts +8 -0
- package/dist/integrations/providers/google-calendar.d.ts.map +1 -0
- package/dist/integrations/providers/google-calendar.js +2 -0
- package/dist/integrations/providers/google-calendar.js.map +1 -0
- package/dist/integrations/providers/impls/elevenlabs-voice.d.ts +21 -0
- package/dist/integrations/providers/impls/elevenlabs-voice.d.ts.map +1 -0
- package/dist/integrations/providers/impls/elevenlabs-voice.js +2 -0
- package/dist/integrations/providers/impls/elevenlabs-voice.js.map +1 -0
- package/dist/integrations/providers/impls/gcs-storage.d.ts +25 -0
- package/dist/integrations/providers/impls/gcs-storage.d.ts.map +1 -0
- package/dist/integrations/providers/impls/gcs-storage.js +2 -0
- package/dist/integrations/providers/impls/gcs-storage.js.map +1 -0
- package/dist/integrations/providers/impls/gmail-inbound.d.ts +27 -0
- package/dist/integrations/providers/impls/gmail-inbound.d.ts.map +1 -0
- package/dist/integrations/providers/impls/gmail-inbound.js +2 -0
- package/dist/integrations/providers/impls/gmail-inbound.js.map +1 -0
- package/dist/integrations/providers/impls/gmail-outbound.d.ts +19 -0
- package/dist/integrations/providers/impls/gmail-outbound.d.ts.map +1 -0
- package/dist/integrations/providers/impls/gmail-outbound.js +7 -0
- package/dist/integrations/providers/impls/gmail-outbound.js.map +1 -0
- package/dist/integrations/providers/impls/google-calendar.d.ts +24 -0
- package/dist/integrations/providers/impls/google-calendar.d.ts.map +1 -0
- package/dist/integrations/providers/impls/google-calendar.js +2 -0
- package/dist/integrations/providers/impls/google-calendar.js.map +1 -0
- package/dist/integrations/providers/impls/index.d.ts +15 -0
- package/dist/integrations/providers/impls/index.js +1 -0
- package/dist/integrations/providers/impls/mistral-embedding.d.ts +24 -0
- package/dist/integrations/providers/impls/mistral-embedding.d.ts.map +1 -0
- package/dist/integrations/providers/impls/mistral-embedding.js +2 -0
- package/dist/integrations/providers/impls/mistral-embedding.js.map +1 -0
- package/dist/integrations/providers/impls/mistral-llm.d.ts +32 -0
- package/dist/integrations/providers/impls/mistral-llm.d.ts.map +1 -0
- package/dist/integrations/providers/impls/mistral-llm.js +2 -0
- package/dist/integrations/providers/impls/mistral-llm.js.map +1 -0
- package/dist/integrations/providers/impls/postmark-email.d.ts +20 -0
- package/dist/integrations/providers/impls/postmark-email.d.ts.map +1 -0
- package/dist/integrations/providers/impls/postmark-email.js +2 -0
- package/dist/integrations/providers/impls/postmark-email.js.map +1 -0
- package/dist/integrations/providers/impls/powens-client.d.ts +125 -0
- package/dist/integrations/providers/impls/powens-client.d.ts.map +1 -0
- package/dist/integrations/providers/impls/powens-client.js +2 -0
- package/dist/integrations/providers/impls/powens-client.js.map +1 -0
- package/dist/integrations/providers/impls/powens-openbanking.d.ts +28 -0
- package/dist/integrations/providers/impls/powens-openbanking.d.ts.map +1 -0
- package/dist/integrations/providers/impls/powens-openbanking.js +2 -0
- package/dist/integrations/providers/impls/powens-openbanking.js.map +1 -0
- package/dist/integrations/providers/impls/provider-factory.d.ts +27 -0
- package/dist/integrations/providers/impls/provider-factory.d.ts.map +1 -0
- package/dist/integrations/providers/impls/provider-factory.js +2 -0
- package/dist/integrations/providers/impls/provider-factory.js.map +1 -0
- package/dist/integrations/providers/impls/qdrant-vector.d.ts +25 -0
- package/dist/integrations/providers/impls/qdrant-vector.d.ts.map +1 -0
- package/dist/integrations/providers/impls/qdrant-vector.js +2 -0
- package/dist/integrations/providers/impls/qdrant-vector.js.map +1 -0
- package/dist/integrations/providers/impls/stripe-payments.d.ts +29 -0
- package/dist/integrations/providers/impls/stripe-payments.d.ts.map +1 -0
- package/dist/integrations/providers/impls/stripe-payments.js +2 -0
- package/dist/integrations/providers/impls/stripe-payments.js.map +1 -0
- package/dist/integrations/providers/impls/twilio-sms.d.ts +21 -0
- package/dist/integrations/providers/impls/twilio-sms.d.ts.map +1 -0
- package/dist/integrations/providers/impls/twilio-sms.js +2 -0
- package/dist/integrations/providers/impls/twilio-sms.js.map +1 -0
- package/dist/integrations/providers/index.d.ts +36 -0
- package/dist/integrations/providers/index.js +1 -0
- package/dist/integrations/providers/llm.d.ts +83 -0
- package/dist/integrations/providers/llm.d.ts.map +1 -0
- package/dist/integrations/providers/llm.js +0 -0
- package/dist/integrations/providers/mistral.d.ts +8 -0
- package/dist/integrations/providers/mistral.d.ts.map +1 -0
- package/dist/integrations/providers/mistral.js +2 -0
- package/dist/integrations/providers/mistral.js.map +1 -0
- package/dist/integrations/providers/openbanking.d.ts +129 -0
- package/dist/integrations/providers/openbanking.d.ts.map +1 -0
- package/dist/integrations/providers/openbanking.js +0 -0
- package/dist/integrations/providers/payments.d.ts +110 -0
- package/dist/integrations/providers/payments.d.ts.map +1 -0
- package/dist/integrations/providers/payments.js +0 -0
- package/dist/integrations/providers/postmark.d.ts +8 -0
- package/dist/integrations/providers/postmark.d.ts.map +1 -0
- package/dist/integrations/providers/postmark.js +2 -0
- package/dist/integrations/providers/postmark.js.map +1 -0
- package/dist/integrations/providers/powens.d.ts +8 -0
- package/dist/integrations/providers/powens.d.ts.map +1 -0
- package/dist/integrations/providers/powens.js +2 -0
- package/dist/integrations/providers/powens.js.map +1 -0
- package/dist/integrations/providers/qdrant.d.ts +8 -0
- package/dist/integrations/providers/qdrant.d.ts.map +1 -0
- package/dist/integrations/providers/qdrant.js +2 -0
- package/dist/integrations/providers/qdrant.js.map +1 -0
- package/dist/integrations/providers/sms.d.ts +35 -0
- package/dist/integrations/providers/sms.d.ts.map +1 -0
- package/dist/integrations/providers/sms.js +0 -0
- package/dist/integrations/providers/storage.d.ts +61 -0
- package/dist/integrations/providers/storage.d.ts.map +1 -0
- package/dist/integrations/providers/storage.js +0 -0
- package/dist/integrations/providers/stripe.d.ts +8 -0
- package/dist/integrations/providers/stripe.d.ts.map +1 -0
- package/dist/integrations/providers/stripe.js +2 -0
- package/dist/integrations/providers/stripe.js.map +1 -0
- package/dist/integrations/providers/twilio-sms.d.ts +8 -0
- package/dist/integrations/providers/twilio-sms.d.ts.map +1 -0
- package/dist/integrations/providers/twilio-sms.js +2 -0
- package/dist/integrations/providers/twilio-sms.js.map +1 -0
- package/dist/integrations/providers/vector-store.d.ts +44 -0
- package/dist/integrations/providers/vector-store.d.ts.map +1 -0
- package/dist/integrations/providers/vector-store.js +0 -0
- package/dist/integrations/providers/voice.d.ts +35 -0
- package/dist/integrations/providers/voice.d.ts.map +1 -0
- package/dist/integrations/providers/voice.js +0 -0
- package/dist/integrations/runtime.d.ts +100 -0
- package/dist/integrations/runtime.d.ts.map +1 -0
- package/dist/integrations/runtime.js +2 -0
- package/dist/integrations/runtime.js.map +1 -0
- package/dist/integrations/secrets/env-secret-provider.d.ts +32 -0
- package/dist/integrations/secrets/env-secret-provider.d.ts.map +1 -0
- package/dist/integrations/secrets/env-secret-provider.js +2 -0
- package/dist/integrations/secrets/env-secret-provider.js.map +1 -0
- package/dist/integrations/secrets/gcp-secret-manager.d.ts +33 -0
- package/dist/integrations/secrets/gcp-secret-manager.d.ts.map +1 -0
- package/dist/integrations/secrets/gcp-secret-manager.js +2 -0
- package/dist/integrations/secrets/gcp-secret-manager.js.map +1 -0
- package/dist/integrations/secrets/index.d.ts +5 -0
- package/dist/integrations/secrets/index.js +1 -0
- package/dist/integrations/secrets/manager.d.ts +48 -0
- package/dist/integrations/secrets/manager.d.ts.map +1 -0
- package/dist/integrations/secrets/manager.js +2 -0
- package/dist/integrations/secrets/manager.js.map +1 -0
- package/dist/integrations/secrets/provider.d.ts +53 -0
- package/dist/integrations/secrets/provider.d.ts.map +1 -0
- package/dist/integrations/secrets/provider.js +2 -0
- package/dist/integrations/secrets/provider.js.map +1 -0
- package/dist/integrations/spec.d.ts +80 -0
- package/dist/integrations/spec.d.ts.map +1 -0
- package/dist/integrations/spec.js +2 -0
- package/dist/integrations/spec.js.map +1 -0
- package/dist/jobs/gcp-cloud-tasks.d.ts +42 -0
- package/dist/jobs/gcp-cloud-tasks.d.ts.map +1 -0
- package/dist/jobs/gcp-cloud-tasks.js +2 -0
- package/dist/jobs/gcp-cloud-tasks.js.map +1 -0
- package/dist/jobs/gcp-pubsub.d.ts +26 -0
- package/dist/jobs/gcp-pubsub.d.ts.map +1 -0
- package/dist/jobs/gcp-pubsub.js +2 -0
- package/dist/jobs/gcp-pubsub.js.map +1 -0
- package/dist/jobs/handlers/gmail-sync-handler.d.ts +10 -0
- package/dist/jobs/handlers/gmail-sync-handler.d.ts.map +1 -0
- package/dist/jobs/handlers/gmail-sync-handler.js +2 -0
- package/dist/jobs/handlers/gmail-sync-handler.js.map +1 -0
- package/dist/jobs/handlers/index.d.ts +3 -0
- package/dist/jobs/handlers/index.js +1 -0
- package/dist/jobs/handlers/storage-document-handler.d.ts +13 -0
- package/dist/jobs/handlers/storage-document-handler.d.ts.map +1 -0
- package/dist/jobs/handlers/storage-document-handler.js +2 -0
- package/dist/jobs/handlers/storage-document-handler.js.map +1 -0
- package/dist/jobs/index.d.ts +7 -0
- package/dist/jobs/index.js +1 -0
- package/dist/jobs/memory-queue.d.ts +19 -0
- package/dist/jobs/memory-queue.d.ts.map +1 -0
- package/dist/jobs/memory-queue.js +2 -0
- package/dist/jobs/memory-queue.js.map +1 -0
- package/dist/jobs/queue.d.ts +27 -0
- package/dist/jobs/queue.d.ts.map +1 -0
- package/dist/jobs/queue.js +0 -0
- package/dist/jsonschema.d.ts +27 -0
- package/dist/jsonschema.d.ts.map +1 -0
- package/dist/jsonschema.js +2 -0
- package/dist/jsonschema.js.map +1 -0
- package/dist/knowledge/binding.d.ts +26 -0
- package/dist/knowledge/binding.d.ts.map +1 -0
- package/dist/knowledge/binding.js +0 -0
- package/dist/knowledge/contracts.d.ts +317 -0
- package/dist/knowledge/contracts.d.ts.map +1 -0
- package/dist/knowledge/contracts.js +2 -0
- package/dist/knowledge/contracts.js.map +1 -0
- package/dist/knowledge/index.d.ts +10 -0
- package/dist/knowledge/index.js +1 -0
- package/dist/knowledge/ingestion/document-processor.d.ts +25 -0
- package/dist/knowledge/ingestion/document-processor.d.ts.map +1 -0
- package/dist/knowledge/ingestion/document-processor.js +2 -0
- package/dist/knowledge/ingestion/document-processor.js.map +1 -0
- package/dist/knowledge/ingestion/embedding-service.d.ts +13 -0
- package/dist/knowledge/ingestion/embedding-service.d.ts.map +1 -0
- package/dist/knowledge/ingestion/embedding-service.js +2 -0
- package/dist/knowledge/ingestion/embedding-service.js.map +1 -0
- package/dist/knowledge/ingestion/gmail-adapter.d.ts +19 -0
- package/dist/knowledge/ingestion/gmail-adapter.d.ts.map +1 -0
- package/dist/knowledge/ingestion/gmail-adapter.js +7 -0
- package/dist/knowledge/ingestion/gmail-adapter.js.map +1 -0
- package/dist/knowledge/ingestion/index.d.ts +6 -0
- package/dist/knowledge/ingestion/index.js +1 -0
- package/dist/knowledge/ingestion/storage-adapter.d.ts +16 -0
- package/dist/knowledge/ingestion/storage-adapter.d.ts.map +1 -0
- package/dist/knowledge/ingestion/storage-adapter.js +2 -0
- package/dist/knowledge/ingestion/storage-adapter.js.map +1 -0
- package/dist/knowledge/ingestion/vector-indexer.d.ts +19 -0
- package/dist/knowledge/ingestion/vector-indexer.d.ts.map +1 -0
- package/dist/knowledge/ingestion/vector-indexer.js +2 -0
- package/dist/knowledge/ingestion/vector-indexer.js.map +1 -0
- package/dist/knowledge/query/index.d.ts +2 -0
- package/dist/knowledge/query/index.js +1 -0
- package/dist/knowledge/query/service.d.ts +30 -0
- package/dist/knowledge/query/service.d.ts.map +1 -0
- package/dist/knowledge/query/service.js +4 -0
- package/dist/knowledge/query/service.js.map +1 -0
- package/dist/knowledge/runtime.d.ts +33 -0
- package/dist/knowledge/runtime.d.ts.map +1 -0
- package/dist/knowledge/runtime.js +2 -0
- package/dist/knowledge/runtime.js.map +1 -0
- package/dist/knowledge/source.d.ts +33 -0
- package/dist/knowledge/source.d.ts.map +1 -0
- package/dist/knowledge/source.js +0 -0
- package/dist/knowledge/spaces/email-threads.d.ts +8 -0
- package/dist/knowledge/spaces/email-threads.d.ts.map +1 -0
- package/dist/knowledge/spaces/email-threads.js +2 -0
- package/dist/knowledge/spaces/email-threads.js.map +1 -0
- package/dist/knowledge/spaces/financial-docs.d.ts +8 -0
- package/dist/knowledge/spaces/financial-docs.d.ts.map +1 -0
- package/dist/knowledge/spaces/financial-docs.js +2 -0
- package/dist/knowledge/spaces/financial-docs.js.map +1 -0
- package/dist/knowledge/spaces/financial-overview.d.ts +8 -0
- package/dist/knowledge/spaces/financial-overview.d.ts.map +1 -0
- package/dist/knowledge/spaces/financial-overview.js +2 -0
- package/dist/knowledge/spaces/financial-overview.js.map +1 -0
- package/dist/knowledge/spaces/index.d.ts +7 -0
- package/dist/knowledge/spaces/index.js +1 -0
- package/dist/knowledge/spaces/product-canon.d.ts +8 -0
- package/dist/knowledge/spaces/product-canon.d.ts.map +1 -0
- package/dist/knowledge/spaces/product-canon.js +2 -0
- package/dist/knowledge/spaces/product-canon.js.map +1 -0
- package/dist/knowledge/spaces/support-faq.d.ts +8 -0
- package/dist/knowledge/spaces/support-faq.d.ts.map +1 -0
- package/dist/knowledge/spaces/support-faq.js +2 -0
- package/dist/knowledge/spaces/support-faq.js.map +1 -0
- package/dist/knowledge/spaces/uploaded-docs.d.ts +8 -0
- package/dist/knowledge/spaces/uploaded-docs.d.ts.map +1 -0
- package/dist/knowledge/spaces/uploaded-docs.js +2 -0
- package/dist/knowledge/spaces/uploaded-docs.js.map +1 -0
- package/dist/knowledge/spec.d.ts +53 -0
- package/dist/knowledge/spec.d.ts.map +1 -0
- package/dist/knowledge/spec.js +2 -0
- package/dist/knowledge/spec.js.map +1 -0
- package/dist/markdown.d.ts +22 -0
- package/dist/markdown.d.ts.map +1 -0
- package/dist/markdown.js +4 -0
- package/dist/markdown.js.map +1 -0
- package/dist/migrations.d.ts +53 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +2 -0
- package/dist/migrations.js.map +1 -0
- package/dist/onboarding-base.d.ts +138 -0
- package/dist/onboarding-base.d.ts.map +1 -0
- package/dist/onboarding-base.js +2 -0
- package/dist/onboarding-base.js.map +1 -0
- package/dist/ownership.d.ts +76 -0
- package/dist/ownership.d.ts.map +1 -0
- package/dist/ownership.js +2 -0
- package/dist/ownership.js.map +1 -0
- package/dist/policy/engine.d.ts +40 -0
- package/dist/policy/engine.d.ts.map +1 -0
- package/dist/policy/engine.js +2 -0
- package/dist/policy/engine.js.map +1 -0
- package/dist/policy/opa-adapter.d.ts +46 -0
- package/dist/policy/opa-adapter.d.ts.map +1 -0
- package/dist/policy/opa-adapter.js +2 -0
- package/dist/policy/opa-adapter.js.map +1 -0
- package/dist/policy/spec.d.ts +115 -0
- package/dist/policy/spec.d.ts.map +1 -0
- package/dist/policy/spec.js +2 -0
- package/dist/policy/spec.js.map +1 -0
- package/dist/presentations.backcompat.d.ts +8 -0
- package/dist/presentations.backcompat.d.ts.map +1 -0
- package/dist/presentations.backcompat.js +2 -0
- package/dist/presentations.backcompat.js.map +1 -0
- package/dist/presentations.d.ts +97 -0
- package/dist/presentations.d.ts.map +1 -0
- package/dist/presentations.js +2 -0
- package/dist/presentations.js.map +1 -0
- package/dist/presentations.v2.d.ts +96 -0
- package/dist/presentations.v2.d.ts.map +1 -0
- package/dist/presentations.v2.js +2 -0
- package/dist/presentations.v2.js.map +1 -0
- package/dist/prompt.d.ts +61 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +2 -0
- package/dist/prompt.js.map +1 -0
- package/dist/promptRegistry.d.ts +16 -0
- package/dist/promptRegistry.d.ts.map +1 -0
- package/dist/promptRegistry.js +2 -0
- package/dist/promptRegistry.js.map +1 -0
- package/dist/regenerator/adapters.d.ts +20 -0
- package/dist/regenerator/adapters.d.ts.map +1 -0
- package/dist/regenerator/adapters.js +0 -0
- package/dist/regenerator/executor.d.ts +71 -0
- package/dist/regenerator/executor.d.ts.map +1 -0
- package/dist/regenerator/executor.js +2 -0
- package/dist/regenerator/executor.js.map +1 -0
- package/dist/regenerator/index.d.ts +7 -0
- package/dist/regenerator/index.js +1 -0
- package/dist/regenerator/service.d.ts +34 -0
- package/dist/regenerator/service.d.ts.map +1 -0
- package/dist/regenerator/service.js +2 -0
- package/dist/regenerator/service.js.map +1 -0
- package/dist/regenerator/sinks.d.ts +27 -0
- package/dist/regenerator/sinks.d.ts.map +1 -0
- package/dist/regenerator/sinks.js +2 -0
- package/dist/regenerator/sinks.js.map +1 -0
- package/dist/regenerator/types.d.ts +108 -0
- package/dist/regenerator/types.d.ts.map +1 -0
- package/dist/regenerator/types.js +0 -0
- package/dist/regenerator/utils.d.ts +10 -0
- package/dist/regenerator/utils.d.ts.map +1 -0
- package/dist/regenerator/utils.js +2 -0
- package/dist/regenerator/utils.js.map +1 -0
- package/dist/registry.d.ts +73 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +2 -0
- package/dist/registry.js.map +1 -0
- package/dist/resources.d.ts +65 -0
- package/dist/resources.d.ts.map +1 -0
- package/dist/resources.js +2 -0
- package/dist/resources.js.map +1 -0
- package/dist/schema/dist/EnumType.js +1 -0
- package/dist/schema/dist/FieldType.js +2 -0
- package/dist/schema/dist/FieldType.js.map +1 -0
- package/dist/schema/dist/ScalarTypeEnum.js +2 -0
- package/dist/schema/dist/ScalarTypeEnum.js.map +1 -0
- package/dist/schema/dist/SchemaModel.js +2 -0
- package/dist/schema/dist/SchemaModel.js.map +1 -0
- package/dist/schema/dist/index.js +1 -0
- package/dist/server/graphql-pothos.d.ts +32 -0
- package/dist/server/graphql-pothos.d.ts.map +1 -0
- package/dist/server/graphql-pothos.js +2 -0
- package/dist/server/graphql-pothos.js.map +1 -0
- package/dist/server/graphql-schema-export.d.ts +7 -0
- package/dist/server/graphql-schema-export.d.ts.map +1 -0
- package/dist/server/graphql-schema-export.js +2 -0
- package/dist/server/graphql-schema-export.js.map +1 -0
- package/dist/server/index.d.ts +9 -0
- package/dist/server/index.js +1 -0
- package/dist/server/provider-mcp.d.ts +52 -0
- package/dist/server/provider-mcp.d.ts.map +1 -0
- package/dist/server/provider-mcp.js +2 -0
- package/dist/server/provider-mcp.js.map +1 -0
- package/dist/server/rest-elysia.d.ts +41 -0
- package/dist/server/rest-elysia.d.ts.map +1 -0
- package/dist/server/rest-elysia.js +2 -0
- package/dist/server/rest-elysia.js.map +1 -0
- package/dist/server/rest-express.d.ts +17 -0
- package/dist/server/rest-express.d.ts.map +1 -0
- package/dist/server/rest-express.js +2 -0
- package/dist/server/rest-express.js.map +1 -0
- package/dist/server/rest-generic.d.ts +33 -0
- package/dist/server/rest-generic.d.ts.map +1 -0
- package/dist/server/rest-generic.js +2 -0
- package/dist/server/rest-generic.js.map +1 -0
- package/dist/server/rest-next-app.d.ts +36 -0
- package/dist/server/rest-next-app.d.ts.map +1 -0
- package/dist/server/rest-next-app.js +2 -0
- package/dist/server/rest-next-app.js.map +1 -0
- package/dist/server/rest-next-mcp.d.ts +12 -0
- package/dist/server/rest-next-mcp.d.ts.map +1 -0
- package/dist/server/rest-next-mcp.js +2 -0
- package/dist/server/rest-next-mcp.js.map +1 -0
- package/dist/server/rest-next-pages.d.ts +10 -0
- package/dist/server/rest-next-pages.d.ts.map +1 -0
- package/dist/server/rest-next-pages.js +2 -0
- package/dist/server/rest-next-pages.js.map +1 -0
- package/dist/spec.d.ts +172 -0
- package/dist/spec.d.ts.map +1 -0
- package/dist/spec.js +2 -0
- package/dist/spec.js.map +1 -0
- package/dist/telemetry/anomaly.d.ts +28 -0
- package/dist/telemetry/anomaly.d.ts.map +1 -0
- package/dist/telemetry/anomaly.js +2 -0
- package/dist/telemetry/anomaly.js.map +1 -0
- package/dist/telemetry/index.d.ts +4 -0
- package/dist/telemetry/index.js +1 -0
- package/dist/telemetry/spec.d.ts +99 -0
- package/dist/telemetry/spec.d.ts.map +1 -0
- package/dist/telemetry/spec.js +2 -0
- package/dist/telemetry/spec.js.map +1 -0
- package/dist/telemetry/tracker.d.ts +52 -0
- package/dist/telemetry/tracker.d.ts.map +1 -0
- package/dist/telemetry/tracker.js +2 -0
- package/dist/telemetry/tracker.js.map +1 -0
- package/dist/tests/index.d.ts +3 -0
- package/dist/tests/index.js +1 -0
- package/dist/tests/runner.d.ts +44 -0
- package/dist/tests/runner.d.ts.map +1 -0
- package/dist/tests/runner.js +2 -0
- package/dist/tests/runner.js.map +1 -0
- package/dist/tests/spec.d.ts +90 -0
- package/dist/tests/spec.d.ts.map +1 -0
- package/dist/tests/spec.js +2 -0
- package/dist/tests/spec.js.map +1 -0
- package/dist/themes.d.ts +56 -0
- package/dist/themes.d.ts.map +1 -0
- package/dist/themes.js +2 -0
- package/dist/themes.js.map +1 -0
- package/dist/translations/catalog.d.ts +29 -0
- package/dist/translations/catalog.d.ts.map +1 -0
- package/dist/translations/catalog.js +0 -0
- package/dist/translations/tenant.d.ts +16 -0
- package/dist/translations/tenant.d.ts.map +1 -0
- package/dist/translations/tenant.js +0 -0
- package/dist/types/all.d.ts +60 -0
- package/dist/types/all.js +0 -0
- package/dist/types.d.ts +86 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +0 -0
- package/dist/workflow/adapters/db-adapter.d.ts +35 -0
- package/dist/workflow/adapters/db-adapter.d.ts.map +1 -0
- package/dist/workflow/adapters/db-adapter.js +2 -0
- package/dist/workflow/adapters/db-adapter.js.map +1 -0
- package/dist/workflow/adapters/file-adapter.d.ts +15 -0
- package/dist/workflow/adapters/file-adapter.d.ts.map +1 -0
- package/dist/workflow/adapters/file-adapter.js +2 -0
- package/dist/workflow/adapters/file-adapter.js.map +1 -0
- package/dist/workflow/adapters/index.d.ts +4 -0
- package/dist/workflow/adapters/index.js +1 -0
- package/dist/workflow/adapters/memory-store.d.ts +19 -0
- package/dist/workflow/adapters/memory-store.d.ts.map +1 -0
- package/dist/workflow/adapters/memory-store.js +2 -0
- package/dist/workflow/adapters/memory-store.js.map +1 -0
- package/dist/workflow/expression.d.ts +10 -0
- package/dist/workflow/expression.d.ts.map +1 -0
- package/dist/workflow/expression.js +2 -0
- package/dist/workflow/expression.js.map +1 -0
- package/dist/workflow/index.d.ts +10 -0
- package/dist/workflow/index.js +1 -0
- package/dist/workflow/runner.d.ts +75 -0
- package/dist/workflow/runner.d.ts.map +1 -0
- package/dist/workflow/runner.js +2 -0
- package/dist/workflow/runner.js.map +1 -0
- package/dist/workflow/sla-monitor.d.ts +21 -0
- package/dist/workflow/sla-monitor.d.ts.map +1 -0
- package/dist/workflow/sla-monitor.js +2 -0
- package/dist/workflow/sla-monitor.js.map +1 -0
- package/dist/workflow/spec.d.ts +100 -0
- package/dist/workflow/spec.d.ts.map +1 -0
- package/dist/workflow/spec.js +2 -0
- package/dist/workflow/spec.js.map +1 -0
- package/dist/workflow/state.d.ts +36 -0
- package/dist/workflow/state.d.ts.map +1 -0
- package/dist/workflow/state.js +0 -0
- package/dist/workflow/validation.d.ts +29 -0
- package/dist/workflow/validation.d.ts.map +1 -0
- package/dist/workflow/validation.js +2 -0
- package/dist/workflow/validation.js.map +1 -0
- package/package.json +403 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { OwnerShipMeta } from "../ownership.js";
|
|
2
|
+
|
|
3
|
+
//#region src/telemetry/spec.d.ts
|
|
4
|
+
type TelemetryPrivacyLevel = 'public' | 'internal' | 'pii' | 'sensitive';
|
|
5
|
+
interface TelemetryMeta extends OwnerShipMeta {
|
|
6
|
+
/** Fully-qualified telemetry spec name (e.g., "sigil.core"). */
|
|
7
|
+
name: string;
|
|
8
|
+
/** Incremented when telemetry definitions change in a breaking way. */
|
|
9
|
+
version: number;
|
|
10
|
+
/** Optional domain or bounded-context hint (e.g., "onboarding"). */
|
|
11
|
+
domain: string;
|
|
12
|
+
}
|
|
13
|
+
interface TelemetryPropertyDef {
|
|
14
|
+
type: 'string' | 'number' | 'boolean' | 'timestamp' | 'json';
|
|
15
|
+
required?: boolean;
|
|
16
|
+
pii?: boolean;
|
|
17
|
+
redact?: boolean;
|
|
18
|
+
description?: string;
|
|
19
|
+
}
|
|
20
|
+
interface TelemetryAnomalyThreshold {
|
|
21
|
+
metric: string;
|
|
22
|
+
min?: number;
|
|
23
|
+
max?: number;
|
|
24
|
+
}
|
|
25
|
+
type TelemetryAnomalyAction = 'alert' | 'log' | 'trigger_regen';
|
|
26
|
+
interface TelemetryAnomalyDetectionConfig {
|
|
27
|
+
enabled: boolean;
|
|
28
|
+
thresholds?: TelemetryAnomalyThreshold[];
|
|
29
|
+
actions?: TelemetryAnomalyAction[];
|
|
30
|
+
/**
|
|
31
|
+
* Minimum sample size before evaluating thresholds.
|
|
32
|
+
* Helps avoid false positives on small sample sizes.
|
|
33
|
+
*/
|
|
34
|
+
minimumSample?: number;
|
|
35
|
+
}
|
|
36
|
+
interface TelemetrySamplingConfig {
|
|
37
|
+
rate: number;
|
|
38
|
+
conditions?: string[];
|
|
39
|
+
}
|
|
40
|
+
interface TelemetryRetentionConfig {
|
|
41
|
+
days: number;
|
|
42
|
+
policy?: 'archive' | 'delete';
|
|
43
|
+
}
|
|
44
|
+
interface TelemetryEventDef {
|
|
45
|
+
/** Name of the event (should match EventSpec.name for cross-reference). */
|
|
46
|
+
name: string;
|
|
47
|
+
/** Version of the underlying event. */
|
|
48
|
+
version: number;
|
|
49
|
+
/** High-level semantics for docs/analyzers. */
|
|
50
|
+
semantics: {
|
|
51
|
+
who?: string;
|
|
52
|
+
what: string;
|
|
53
|
+
why?: string;
|
|
54
|
+
};
|
|
55
|
+
/** Detailed property metadata keyed by property name. */
|
|
56
|
+
properties: Record<string, TelemetryPropertyDef>;
|
|
57
|
+
/** Privacy level for the entire event. */
|
|
58
|
+
privacy: TelemetryPrivacyLevel;
|
|
59
|
+
/** Retention policy overrides. */
|
|
60
|
+
retention?: TelemetryRetentionConfig;
|
|
61
|
+
/** Sampling rules, defaulting to spec.config defaults. */
|
|
62
|
+
sampling?: TelemetrySamplingConfig;
|
|
63
|
+
/** Anomaly detection overrides. */
|
|
64
|
+
anomalyDetection?: TelemetryAnomalyDetectionConfig;
|
|
65
|
+
/** Optional tags for analytics/AI hints. */
|
|
66
|
+
tags?: string[];
|
|
67
|
+
}
|
|
68
|
+
interface TelemetryProviderConfig {
|
|
69
|
+
type: 'posthog' | 'segment' | 'opentelemetry' | 'internal';
|
|
70
|
+
config: Record<string, unknown>;
|
|
71
|
+
}
|
|
72
|
+
interface TelemetryConfig {
|
|
73
|
+
defaultRetentionDays?: number;
|
|
74
|
+
defaultSamplingRate?: number;
|
|
75
|
+
providers?: TelemetryProviderConfig[];
|
|
76
|
+
anomalyDetection?: {
|
|
77
|
+
enabled: boolean;
|
|
78
|
+
checkIntervalMs?: number;
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
interface TelemetrySpec {
|
|
82
|
+
meta: TelemetryMeta;
|
|
83
|
+
events: TelemetryEventDef[];
|
|
84
|
+
config?: TelemetryConfig;
|
|
85
|
+
}
|
|
86
|
+
declare class TelemetryRegistry {
|
|
87
|
+
private readonly items;
|
|
88
|
+
private readonly eventsByKey;
|
|
89
|
+
private readonly specByEventKey;
|
|
90
|
+
register(spec: TelemetrySpec): this;
|
|
91
|
+
list(): TelemetrySpec[];
|
|
92
|
+
get(name: string, version?: number): TelemetrySpec | undefined;
|
|
93
|
+
findEventDef(name: string, version?: number): TelemetryEventDef | undefined;
|
|
94
|
+
getSpecForEvent(name: string, version?: number): TelemetrySpec | undefined;
|
|
95
|
+
}
|
|
96
|
+
declare function makeTelemetryKey(meta: TelemetryMeta): string;
|
|
97
|
+
//#endregion
|
|
98
|
+
export { TelemetryAnomalyAction, TelemetryAnomalyDetectionConfig, TelemetryAnomalyThreshold, TelemetryConfig, TelemetryEventDef, TelemetryMeta, TelemetryPrivacyLevel, TelemetryPropertyDef, TelemetryProviderConfig, TelemetryRegistry, TelemetryRetentionConfig, TelemetrySamplingConfig, TelemetrySpec, makeTelemetryKey };
|
|
99
|
+
//# sourceMappingURL=spec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec.d.ts","names":[],"sources":["../../src/telemetry/spec.ts"],"sourcesContent":[],"mappings":";;;KAGY,qBAAA;UAMK,aAAA,SAAsB;EAN3B;EAMK,IAAA,EAAA,MAAA;EASA;EAQA,OAAA,EAAA,MAAA;EAML;EAKK,MAAA,EAAA,MAAA;AAWjB;AAKiB,UAnCA,oBAAA,CAmCwB;EAKxB,IAAA,EAAA,QAAA,GAAA,QAAiB,GAAA,SAAA,GAAA,WAAA,GAAA,MAAA;EAYL,QAAA,CAAA,EAAA,OAAA;EAAf,GAAA,CAAA,EAAA,OAAA;EAEH,MAAA,CAAA,EAAA,OAAA;EAEG,WAAA,CAAA,EAAA,MAAA;;AAIO,UApDJ,yBAAA,CAoDI;EAA+B,MAAA,EAAA,MAAA;EAKnC,GAAA,CAAA,EAAA,MAAA;EAKA,GAAA,CAAA,EAAA,MAAA;AAUjB;AACQ,KAnEI,sBAAA,GAmEJ,OAAA,GAAA,KAAA,GAAA,eAAA;AACE,UA/DO,+BAAA,CA+DP;EACC,OAAA,EAAA,OAAA;EAAe,UAAA,CAAA,EA9DX,yBA8DW,EAAA;EAKb,OAAA,CAAA,EAlED,sBAkEkB,EAAA;EAKb;;;;EAsDZ,aAAA,CAAA,EAAA,MAAA;;AAmBW,UAxIC,uBAAA,CAwIsB;;;;UAnItB,wBAAA;;;;UAKA,iBAAA;;;;;;;;;;;;cAYH,eAAe;;WAElB;;cAEG;;aAED;;qBAEQ;;;;UAKJ,uBAAA;;UAEP;;UAGO,eAAA;;;cAGH;;;;;;UAOG,aAAA;QACT;UACE;WACC;;cAKE,iBAAA;;;;iBAKI;UAaP;uCAI6B;gDAgBS;mDAqB3C;;iBAmBW,gBAAA,OAAuB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=e=>`${e.name}.v${e.version}`;var t=class{items=new Map;eventsByKey=new Map;specByEventKey=new Map;register(t){let n=e(t.meta);if(this.items.has(n))throw Error(`Duplicate TelemetrySpec registration for ${n}`);this.items.set(n,t);for(let e of t.events)this.eventsByKey.set(`${e.name}.v${e.version}`,e),this.specByEventKey.set(`${e.name}.v${e.version}`,t);return this}list(){return[...this.items.values()]}get(e,t){if(t!=null)return this.items.get(`${e}.v${t}`);let n,r=-1/0;for(let t of this.items.values())t.meta.name===e&&t.meta.version>r&&(r=t.meta.version,n=t);return n}findEventDef(e,t){if(t!=null)return this.eventsByKey.get(`${e}.v${t}`);let n,r=-1/0;for(let[t,i]of this.eventsByKey.entries()){let[a,o]=t.split(`.v`);if(a!==e)continue;let s=Number(o);Number.isFinite(s)&&s>r&&(r=s,n=i)}return n}getSpecForEvent(e,t){if(t!=null)return this.specByEventKey.get(`${e}.v${t}`);let n,r=-1/0;for(let[t,i]of this.specByEventKey.entries()){let[a,o]=t.split(`.v`);if(a!==e)continue;let s=Number(o);Number.isFinite(s)&&s>r&&(r=s,n=i)}return n}};function n(t){return e(t)}export{t as TelemetryRegistry,n as makeTelemetryKey};
|
|
2
|
+
//# sourceMappingURL=spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec.js","names":["latest: TelemetrySpec | undefined","latest: TelemetryEventDef | undefined"],"sources":["../../src/telemetry/spec.ts"],"sourcesContent":["import type { OwnerShipMeta } from '../ownership';\nimport type { EventKey } from '../events';\n\nexport type TelemetryPrivacyLevel =\n | 'public'\n | 'internal'\n | 'pii'\n | 'sensitive';\n\nexport interface TelemetryMeta extends OwnerShipMeta {\n /** Fully-qualified telemetry spec name (e.g., \"sigil.core\"). */\n name: string;\n /** Incremented when telemetry definitions change in a breaking way. */\n version: number;\n /** Optional domain or bounded-context hint (e.g., \"onboarding\"). */\n domain: string;\n}\n\nexport interface TelemetryPropertyDef {\n type: 'string' | 'number' | 'boolean' | 'timestamp' | 'json';\n required?: boolean;\n pii?: boolean;\n redact?: boolean;\n description?: string;\n}\n\nexport interface TelemetryAnomalyThreshold {\n metric: string;\n min?: number;\n max?: number;\n}\n\nexport type TelemetryAnomalyAction =\n | 'alert'\n | 'log'\n | 'trigger_regen';\n\nexport interface TelemetryAnomalyDetectionConfig {\n enabled: boolean;\n thresholds?: TelemetryAnomalyThreshold[];\n actions?: TelemetryAnomalyAction[];\n /**\n * Minimum sample size before evaluating thresholds.\n * Helps avoid false positives on small sample sizes.\n */\n minimumSample?: number;\n}\n\nexport interface TelemetrySamplingConfig {\n rate: number;\n conditions?: string[];\n}\n\nexport interface TelemetryRetentionConfig {\n days: number;\n policy?: 'archive' | 'delete';\n}\n\nexport interface TelemetryEventDef {\n /** Name of the event (should match EventSpec.name for cross-reference). */\n name: string;\n /** Version of the underlying event. */\n version: number;\n /** High-level semantics for docs/analyzers. */\n semantics: {\n who?: string;\n what: string;\n why?: string;\n };\n /** Detailed property metadata keyed by property name. */\n properties: Record<string, TelemetryPropertyDef>;\n /** Privacy level for the entire event. */\n privacy: TelemetryPrivacyLevel;\n /** Retention policy overrides. */\n retention?: TelemetryRetentionConfig;\n /** Sampling rules, defaulting to spec.config defaults. */\n sampling?: TelemetrySamplingConfig;\n /** Anomaly detection overrides. */\n anomalyDetection?: TelemetryAnomalyDetectionConfig;\n /** Optional tags for analytics/AI hints. */\n tags?: string[];\n}\n\nexport interface TelemetryProviderConfig {\n type: 'posthog' | 'segment' | 'opentelemetry' | 'internal';\n config: Record<string, unknown>;\n}\n\nexport interface TelemetryConfig {\n defaultRetentionDays?: number;\n defaultSamplingRate?: number;\n providers?: TelemetryProviderConfig[];\n anomalyDetection?: {\n enabled: boolean;\n checkIntervalMs?: number;\n };\n}\n\nexport interface TelemetrySpec {\n meta: TelemetryMeta;\n events: TelemetryEventDef[];\n config?: TelemetryConfig;\n}\n\nconst telemetryKey = (meta: TelemetryMeta) => `${meta.name}.v${meta.version}`;\n\nexport class TelemetryRegistry {\n private readonly items = new Map<string, TelemetrySpec>();\n private readonly eventsByKey = new Map<EventKey, TelemetryEventDef>();\n private readonly specByEventKey = new Map<EventKey, TelemetrySpec>();\n\n register(spec: TelemetrySpec): this {\n const key = telemetryKey(spec.meta);\n if (this.items.has(key)) {\n throw new Error(`Duplicate TelemetrySpec registration for ${key}`);\n }\n this.items.set(key, spec);\n for (const event of spec.events) {\n this.eventsByKey.set(`${event.name}.v${event.version}`, event);\n this.specByEventKey.set(`${event.name}.v${event.version}`, spec);\n }\n return this;\n }\n\n list(): TelemetrySpec[] {\n return [...this.items.values()];\n }\n\n get(name: string, version?: number): TelemetrySpec | undefined {\n if (version != null) {\n return this.items.get(`${name}.v${version}`);\n }\n let latest: TelemetrySpec | undefined;\n let maxVersion = -Infinity;\n for (const item of this.items.values()) {\n if (item.meta.name !== name) continue;\n if (item.meta.version > maxVersion) {\n maxVersion = item.meta.version;\n latest = item;\n }\n }\n return latest;\n }\n\n findEventDef(name: string, version?: number): TelemetryEventDef | undefined {\n if (version != null) {\n return this.eventsByKey.get(`${name}.v${version}`);\n }\n let latest: TelemetryEventDef | undefined;\n let maxVersion = -Infinity;\n for (const [key, event] of this.eventsByKey.entries()) {\n const [eventName, versionPart] = key.split('.v');\n if (eventName !== name) continue;\n const ver = Number(versionPart);\n if (Number.isFinite(ver) && ver > maxVersion) {\n maxVersion = ver;\n latest = event;\n }\n }\n return latest;\n }\n\n getSpecForEvent(\n name: string,\n version?: number\n ): TelemetrySpec | undefined {\n if (version != null) {\n return this.specByEventKey.get(`${name}.v${version}`);\n }\n let latest: TelemetrySpec | undefined;\n let maxVersion = -Infinity;\n for (const [key, spec] of this.specByEventKey.entries()) {\n const [eventName, versionPart] = key.split('.v');\n if (eventName !== name) continue;\n const ver = Number(versionPart);\n if (Number.isFinite(ver) && ver > maxVersion) {\n maxVersion = ver;\n latest = spec;\n }\n }\n return latest;\n }\n}\n\nexport function makeTelemetryKey(meta: TelemetryMeta) {\n return telemetryKey(meta);\n}\n\n"],"mappings":"AAwGA,MAAM,EAAgB,GAAwB,GAAG,EAAK,KAAK,IAAI,EAAK,UAEpE,IAAa,EAAb,KAA+B,CAC7B,MAAyB,IAAI,IAC7B,YAA+B,IAAI,IACnC,eAAkC,IAAI,IAEtC,SAAS,EAA2B,CAClC,IAAM,EAAM,EAAa,EAAK,KAAK,CACnC,GAAI,KAAK,MAAM,IAAI,EAAI,CACrB,MAAU,MAAM,4CAA4C,IAAM,CAEpE,KAAK,MAAM,IAAI,EAAK,EAAK,CACzB,IAAK,IAAM,KAAS,EAAK,OACvB,KAAK,YAAY,IAAI,GAAG,EAAM,KAAK,IAAI,EAAM,UAAW,EAAM,CAC7D,KAAK,eAAe,IAAI,GAAG,EAAM,KAAK,IAAI,EAAM,UAAW,EAAK,CAEnE,OAAO,KAGT,MAAwB,CACtB,MAAO,CAAC,GAAG,KAAK,MAAM,QAAQ,CAAC,CAGjC,IAAI,EAAc,EAA6C,CAC7D,GAAI,GAAW,KACb,OAAO,KAAK,MAAM,IAAI,GAAG,EAAK,IAAI,IAAU,CAE9C,IAAIA,EACA,EAAa,KACjB,IAAK,IAAM,KAAQ,KAAK,MAAM,QAAQ,CAChC,EAAK,KAAK,OAAS,GACnB,EAAK,KAAK,QAAU,IACtB,EAAa,EAAK,KAAK,QACvB,EAAS,GAGb,OAAO,EAGT,aAAa,EAAc,EAAiD,CAC1E,GAAI,GAAW,KACb,OAAO,KAAK,YAAY,IAAI,GAAG,EAAK,IAAI,IAAU,CAEpD,IAAIC,EACA,EAAa,KACjB,IAAK,GAAM,CAAC,EAAK,KAAU,KAAK,YAAY,SAAS,CAAE,CACrD,GAAM,CAAC,EAAW,GAAe,EAAI,MAAM,KAAK,CAChD,GAAI,IAAc,EAAM,SACxB,IAAM,EAAM,OAAO,EAAY,CAC3B,OAAO,SAAS,EAAI,EAAI,EAAM,IAChC,EAAa,EACb,EAAS,GAGb,OAAO,EAGT,gBACE,EACA,EAC2B,CAC3B,GAAI,GAAW,KACb,OAAO,KAAK,eAAe,IAAI,GAAG,EAAK,IAAI,IAAU,CAEvD,IAAID,EACA,EAAa,KACjB,IAAK,GAAM,CAAC,EAAK,KAAS,KAAK,eAAe,SAAS,CAAE,CACvD,GAAM,CAAC,EAAW,GAAe,EAAI,MAAM,KAAK,CAChD,GAAI,IAAc,EAAM,SACxB,IAAM,EAAM,OAAO,EAAY,CAC3B,OAAO,SAAS,EAAI,EAAI,EAAM,IAChC,EAAa,EACb,EAAS,GAGb,OAAO,IAIX,SAAgB,EAAiB,EAAqB,CACpD,OAAO,EAAa,EAAK"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { TelemetryEventDef, TelemetryRegistry, TelemetrySpec } from "./spec.js";
|
|
2
|
+
import { TelemetryAnomalyMonitor } from "./anomaly.js";
|
|
3
|
+
|
|
4
|
+
//#region src/telemetry/tracker.d.ts
|
|
5
|
+
interface TelemetryEventContext {
|
|
6
|
+
tenantId?: string;
|
|
7
|
+
organizationId?: string | null;
|
|
8
|
+
userId?: string | null;
|
|
9
|
+
sessionId?: string | null;
|
|
10
|
+
actor?: 'anonymous' | 'user' | 'admin';
|
|
11
|
+
channel?: 'web' | 'mobile' | 'job' | 'agent';
|
|
12
|
+
metadata?: Record<string, unknown>;
|
|
13
|
+
}
|
|
14
|
+
interface TelemetryDispatch {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
version: number;
|
|
18
|
+
occurredAt: string;
|
|
19
|
+
properties: Record<string, unknown>;
|
|
20
|
+
privacy: TelemetryEventDef['privacy'];
|
|
21
|
+
context: TelemetryEventContext;
|
|
22
|
+
tags?: string[];
|
|
23
|
+
spec: TelemetrySpec;
|
|
24
|
+
definition: TelemetryEventDef;
|
|
25
|
+
}
|
|
26
|
+
interface RuntimeTelemetryProvider {
|
|
27
|
+
id: string;
|
|
28
|
+
send(event: TelemetryDispatch): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
interface TelemetryTrackerOptions {
|
|
31
|
+
registry: TelemetryRegistry;
|
|
32
|
+
providers?: RuntimeTelemetryProvider[];
|
|
33
|
+
anomalyMonitor?: TelemetryAnomalyMonitor;
|
|
34
|
+
random?: () => number;
|
|
35
|
+
clock?: () => Date;
|
|
36
|
+
}
|
|
37
|
+
declare class TelemetryTracker {
|
|
38
|
+
private readonly providers;
|
|
39
|
+
private readonly registry;
|
|
40
|
+
private readonly anomalyMonitor?;
|
|
41
|
+
private readonly random;
|
|
42
|
+
private readonly clock;
|
|
43
|
+
constructor(options: TelemetryTrackerOptions);
|
|
44
|
+
registerProvider(provider: RuntimeTelemetryProvider): void;
|
|
45
|
+
unregisterProvider(providerId: string): void;
|
|
46
|
+
track(name: string, version: number, properties: Record<string, unknown>, context?: TelemetryEventContext): Promise<boolean>;
|
|
47
|
+
private shouldSample;
|
|
48
|
+
private redactProperties;
|
|
49
|
+
}
|
|
50
|
+
//#endregion
|
|
51
|
+
export { RuntimeTelemetryProvider, TelemetryDispatch, TelemetryEventContext, TelemetryTracker, TelemetryTrackerOptions };
|
|
52
|
+
//# sourceMappingURL=tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker.d.ts","names":[],"sources":["../../src/telemetry/tracker.ts"],"sourcesContent":[],"mappings":";;;;UASiB,qBAAA;;EAAA,cAAA,CAAA,EAAA,MAAA,GAAqB,IAAA;EAUrB,MAAA,CAAA,EAAA,MAAA,GAAA,IAAiB;EAKpB,SAAA,CAAA,EAAA,MAAA,GAAA,IAAA;EACH,KAAA,CAAA,EAAA,WAAA,GAAA,MAAA,GAAA,OAAA;EACA,OAAA,CAAA,EAAA,KAAA,GAAA,QAAA,GAAA,KAAA,GAAA,OAAA;EAEH,QAAA,CAAA,EAZK,MAYL,CAAA,MAAA,EAAA,OAAA,CAAA;;AACuB,UAVd,iBAAA,CAUc;EAGd,EAAA,EAAA,MAAA;EAKA,IAAA,EAAA,MAAA;EACL,OAAA,EAAA,MAAA;EACE,UAAA,EAAA,MAAA;EACK,UAAA,EAhBL,MAgBK,CAAA,MAAA,EAAA,OAAA,CAAA;EAEH,OAAA,EAjBL,iBAiBK,CAAA,SAAA,CAAA;EAAI,OAAA,EAhBT,qBAgBS;EAiBP,IAAA,CAAA,EAAA,MAAA,EAAA;EAOU,IAAA,EAtCf,aAsCe;EAWM,UAAA,EAhDf,iBAgDe;;AAYhB,UAzDI,wBAAA,CAyDJ;EACR,EAAA,EAAA,MAAA;EAAO,IAAA,CAAA,KAAA,EAxDE,iBAwDF,CAAA,EAxDsB,OAwDtB,CAAA,IAAA,CAAA;;UArDK,uBAAA;YACL;cACE;mBACK;;gBAEH;;cAiBH,gBAAA;;;;;;uBAOU;6BAWM;;mDAWb,mCACH,wBACR"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{randomUUID as e}from"crypto";const t=e=>e==null?e:typeof e==`string`?`REDACTED`:typeof e==`number`?0:typeof e==`boolean`?!1:Array.isArray(e)?e.map(()=>`REDACTED`):typeof e==`object`?Object.fromEntries(Object.keys(e).map(e=>[e,`REDACTED`])):`REDACTED`;var n=class{providers=new Map;registry;anomalyMonitor;random;clock;constructor(e){this.registry=e.registry,this.anomalyMonitor=e.anomalyMonitor,this.random=e.random??Math.random,this.clock=e.clock??(()=>new Date);for(let t of e.providers??[])this.providers.set(t.id,t)}registerProvider(e){this.providers.set(e.id,e)}unregisterProvider(e){this.providers.delete(e)}async track(t,n,r,i={}){let a=this.registry.findEventDef(t,n);if(!a)return!1;let o=this.registry.getSpecForEvent(a.name,a.version);if(!o||!this.shouldSample(a.sampling??o.config?.defaultSamplingRate))return!1;let s=this.redactProperties(a,r),c={id:e(),name:a.name,version:a.version,occurredAt:this.clock().toISOString(),properties:s,privacy:a.privacy,context:i,tags:a.tags,spec:o,definition:a};return await Promise.all([...this.providers.values()].map(e=>e.send(c))),this.anomalyMonitor?.observe(c),!0}shouldSample(e){return typeof e==`number`?this.random()<e:e?this.random()<e.rate:!0}redactProperties(e,n){let r={};for(let[i,a]of Object.entries(n)){let n=e.properties[i];if(!n){r[i]=a;continue}n.redact||n.pii||e.privacy===`sensitive`?r[i]=t(a):r[i]=a}return r}};export{n as TelemetryTracker};
|
|
2
|
+
//# sourceMappingURL=tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker.js","names":["dispatch: TelemetryDispatch","result: Record<string, unknown>"],"sources":["../../src/telemetry/tracker.ts"],"sourcesContent":["import { randomUUID } from 'crypto';\nimport type { TelemetryAnomalyMonitor } from './anomaly';\nimport type {\n TelemetryEventDef,\n TelemetryRegistry,\n TelemetrySamplingConfig,\n TelemetrySpec,\n} from './spec';\n\nexport interface TelemetryEventContext {\n tenantId?: string;\n organizationId?: string | null;\n userId?: string | null;\n sessionId?: string | null;\n actor?: 'anonymous' | 'user' | 'admin';\n channel?: 'web' | 'mobile' | 'job' | 'agent';\n metadata?: Record<string, unknown>;\n}\n\nexport interface TelemetryDispatch {\n id: string;\n name: string;\n version: number;\n occurredAt: string;\n properties: Record<string, unknown>;\n privacy: TelemetryEventDef['privacy'];\n context: TelemetryEventContext;\n tags?: string[];\n spec: TelemetrySpec;\n definition: TelemetryEventDef;\n}\n\nexport interface RuntimeTelemetryProvider {\n id: string;\n send(event: TelemetryDispatch): Promise<void>;\n}\n\nexport interface TelemetryTrackerOptions {\n registry: TelemetryRegistry;\n providers?: RuntimeTelemetryProvider[];\n anomalyMonitor?: TelemetryAnomalyMonitor;\n random?: () => number;\n clock?: () => Date;\n}\n\nconst maskValue = (value: unknown) => {\n if (value == null) return value;\n if (typeof value === 'string') return 'REDACTED';\n if (typeof value === 'number') return 0;\n if (typeof value === 'boolean') return false;\n if (Array.isArray(value)) return value.map(() => 'REDACTED');\n if (typeof value === 'object') {\n return Object.fromEntries(\n Object.keys(value as Record<string, unknown>).map((key) => [key, 'REDACTED'])\n );\n }\n return 'REDACTED';\n};\n\nexport class TelemetryTracker {\n private readonly providers = new Map<string, RuntimeTelemetryProvider>();\n private readonly registry: TelemetryRegistry;\n private readonly anomalyMonitor?: TelemetryAnomalyMonitor;\n private readonly random: () => number;\n private readonly clock: () => Date;\n\n constructor(options: TelemetryTrackerOptions) {\n this.registry = options.registry;\n this.anomalyMonitor = options.anomalyMonitor;\n this.random = options.random ?? Math.random;\n this.clock = options.clock ?? (() => new Date());\n\n for (const provider of options.providers ?? []) {\n this.providers.set(provider.id, provider);\n }\n }\n\n registerProvider(provider: RuntimeTelemetryProvider) {\n this.providers.set(provider.id, provider);\n }\n\n unregisterProvider(providerId: string) {\n this.providers.delete(providerId);\n }\n\n async track(\n name: string,\n version: number,\n properties: Record<string, unknown>,\n context: TelemetryEventContext = {}\n ): Promise<boolean> {\n const definition = this.registry.findEventDef(name, version);\n if (!definition) return false;\n\n const spec = this.registry.getSpecForEvent(definition.name, definition.version);\n if (!spec) return false;\n\n if (!this.shouldSample(definition.sampling ?? spec.config?.defaultSamplingRate)) {\n return false;\n }\n\n const redactedProperties = this.redactProperties(definition, properties);\n const dispatch: TelemetryDispatch = {\n id: randomUUID(),\n name: definition.name,\n version: definition.version,\n occurredAt: this.clock().toISOString(),\n properties: redactedProperties,\n privacy: definition.privacy,\n context,\n tags: definition.tags,\n spec,\n definition,\n };\n\n await Promise.all(\n [...this.providers.values()].map((provider) => provider.send(dispatch))\n );\n\n this.anomalyMonitor?.observe(dispatch);\n return true;\n }\n\n private shouldSample(\n sampling: TelemetrySamplingConfig | number | undefined\n ): boolean {\n if (typeof sampling === 'number') {\n return this.random() < sampling;\n }\n if (!sampling) return true;\n return this.random() < sampling.rate;\n }\n\n private redactProperties(\n definition: TelemetryEventDef,\n properties: Record<string, unknown>\n ): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(properties)) {\n const def = definition.properties[key];\n if (!def) {\n result[key] = value;\n continue;\n }\n if (def.redact || def.pii || definition.privacy === 'sensitive') {\n result[key] = maskValue(value);\n } else {\n result[key] = value;\n }\n }\n return result;\n }\n}\n\n"],"mappings":"oCA6CA,MAAM,EAAa,GACb,GAAS,KAAa,EACtB,OAAO,GAAU,SAAiB,WAClC,OAAO,GAAU,SAAiB,EAClC,OAAO,GAAU,UAAkB,GACnC,MAAM,QAAQ,EAAM,CAAS,EAAM,QAAU,WAAW,CACxD,OAAO,GAAU,SACZ,OAAO,YACZ,OAAO,KAAK,EAAiC,CAAC,IAAK,GAAQ,CAAC,EAAK,WAAW,CAAC,CAC9E,CAEI,WAGT,IAAa,EAAb,KAA8B,CAC5B,UAA6B,IAAI,IACjC,SACA,eACA,OACA,MAEA,YAAY,EAAkC,CAC5C,KAAK,SAAW,EAAQ,SACxB,KAAK,eAAiB,EAAQ,eAC9B,KAAK,OAAS,EAAQ,QAAU,KAAK,OACrC,KAAK,MAAQ,EAAQ,YAAgB,IAAI,MAEzC,IAAK,IAAM,KAAY,EAAQ,WAAa,EAAE,CAC5C,KAAK,UAAU,IAAI,EAAS,GAAI,EAAS,CAI7C,iBAAiB,EAAoC,CACnD,KAAK,UAAU,IAAI,EAAS,GAAI,EAAS,CAG3C,mBAAmB,EAAoB,CACrC,KAAK,UAAU,OAAO,EAAW,CAGnC,MAAM,MACJ,EACA,EACA,EACA,EAAiC,EAAE,CACjB,CAClB,IAAM,EAAa,KAAK,SAAS,aAAa,EAAM,EAAQ,CAC5D,GAAI,CAAC,EAAY,MAAO,GAExB,IAAM,EAAO,KAAK,SAAS,gBAAgB,EAAW,KAAM,EAAW,QAAQ,CAG/E,GAFI,CAAC,GAED,CAAC,KAAK,aAAa,EAAW,UAAY,EAAK,QAAQ,oBAAoB,CAC7E,MAAO,GAGT,IAAM,EAAqB,KAAK,iBAAiB,EAAY,EAAW,CAClEA,EAA8B,CAClC,GAAI,GAAY,CAChB,KAAM,EAAW,KACjB,QAAS,EAAW,QACpB,WAAY,KAAK,OAAO,CAAC,aAAa,CACtC,WAAY,EACZ,QAAS,EAAW,QACpB,UACA,KAAM,EAAW,KACjB,OACA,aACD,CAOD,OALA,MAAM,QAAQ,IACZ,CAAC,GAAG,KAAK,UAAU,QAAQ,CAAC,CAAC,IAAK,GAAa,EAAS,KAAK,EAAS,CAAC,CACxE,CAED,KAAK,gBAAgB,QAAQ,EAAS,CAC/B,GAGT,aACE,EACS,CAKT,OAJI,OAAO,GAAa,SACf,KAAK,QAAQ,CAAG,EAEpB,EACE,KAAK,QAAQ,CAAG,EAAS,KADV,GAIxB,iBACE,EACA,EACyB,CACzB,IAAMC,EAAkC,EAAE,CAC1C,IAAK,GAAM,CAAC,EAAK,KAAU,OAAO,QAAQ,EAAW,CAAE,CACrD,IAAM,EAAM,EAAW,WAAW,GAClC,GAAI,CAAC,EAAK,CACR,EAAO,GAAO,EACd,SAEE,EAAI,QAAU,EAAI,KAAO,EAAW,UAAY,YAClD,EAAO,GAAO,EAAU,EAAM,CAE9B,EAAO,GAAO,EAGlB,OAAO"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { Action, Assertion, CoverageRequirement, ExpectErrorAssertion, ExpectEventsAssertion, ExpectOutputAssertion, ExpectedEvent, Fixture, OperationTargetRef, TestRegistry, TestScenario, TestSpec, TestSpecMeta, TestSpecRef, TestTarget, WorkflowTargetRef, makeTestKey } from "./spec.js";
|
|
2
|
+
import { AssertionResult, ScenarioRunResult, TestRunResult, TestRunner, TestRunnerConfig } from "./runner.js";
|
|
3
|
+
export { Action, Assertion, AssertionResult, CoverageRequirement, ExpectErrorAssertion, ExpectEventsAssertion, ExpectOutputAssertion, ExpectedEvent, Fixture, OperationTargetRef, ScenarioRunResult, TestRegistry, TestRunResult, TestRunner, TestRunnerConfig, TestScenario, TestSpec, TestSpecMeta, TestSpecRef, TestTarget, WorkflowTargetRef, makeTestKey };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{TestRegistry as e,makeTestKey as t}from"./spec.js";import{TestRunner as n}from"./runner.js";export{e as TestRegistry,n as TestRunner,t as makeTestKey};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Assertion, TestScenario, TestSpec } from "./spec.js";
|
|
2
|
+
import { HandlerCtx } from "../types.js";
|
|
3
|
+
import { SpecRegistry } from "../registry.js";
|
|
4
|
+
import "../index.js";
|
|
5
|
+
|
|
6
|
+
//#region src/tests/runner.d.ts
|
|
7
|
+
interface ScenarioRunResult {
|
|
8
|
+
scenario: TestScenario;
|
|
9
|
+
status: 'passed' | 'failed';
|
|
10
|
+
error?: Error;
|
|
11
|
+
assertionResults: AssertionResult[];
|
|
12
|
+
}
|
|
13
|
+
interface AssertionResult {
|
|
14
|
+
assertion: Assertion;
|
|
15
|
+
status: 'passed' | 'failed';
|
|
16
|
+
message?: string;
|
|
17
|
+
}
|
|
18
|
+
interface TestRunResult {
|
|
19
|
+
spec: TestSpec;
|
|
20
|
+
scenarios: ScenarioRunResult[];
|
|
21
|
+
passed: number;
|
|
22
|
+
failed: number;
|
|
23
|
+
}
|
|
24
|
+
interface TestRunnerConfig {
|
|
25
|
+
registry: SpecRegistry;
|
|
26
|
+
createContext?: () => HandlerCtx | Promise<HandlerCtx>;
|
|
27
|
+
beforeEach?: (scenario: TestScenario) => void | Promise<void>;
|
|
28
|
+
afterEach?: (scenario: TestScenario, result: ScenarioRunResult) => void | Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
declare class TestRunner {
|
|
31
|
+
private readonly config;
|
|
32
|
+
constructor(config: TestRunnerConfig);
|
|
33
|
+
run(spec: TestSpec): Promise<TestRunResult>;
|
|
34
|
+
private runScenario;
|
|
35
|
+
private createContext;
|
|
36
|
+
private executeOperation;
|
|
37
|
+
private evaluateAssertion;
|
|
38
|
+
private evaluateOutputAssertion;
|
|
39
|
+
private evaluateErrorAssertion;
|
|
40
|
+
private evaluateEventsAssertion;
|
|
41
|
+
}
|
|
42
|
+
//#endregion
|
|
43
|
+
export { AssertionResult, ScenarioRunResult, TestRunResult, TestRunner, TestRunnerConfig };
|
|
44
|
+
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.d.ts","names":[],"sources":["../../src/tests/runner.ts"],"sourcesContent":[],"mappings":";;;;;;UAciB,iBAAA;YACL;;EADK,KAAA,CAAA,EAGP,KAHO;EACL,gBAAA,EAGQ,eAHR,EAAA;;AAGQ,UAGH,eAAA,CAHG;EAAe,SAAA,EAItB,SAJsB;EAGlB,MAAA,EAAA,QAAA,GAAe,QAAA;EAMf,OAAA,CAAA,EAAA,MAAa;AAO9B;AACY,UARK,aAAA,CAQL;EACY,IAAA,EARhB,QAQgB;EAAqB,SAAA,EAPhC,iBAOgC,EAAA;EAAR,MAAA,EAAA,MAAA;EACX,MAAA,EAAA,MAAA;;AAEZ,UALG,gBAAA,CAKH;EACF,QAAA,EALA,YAKA;EACE,aAAA,CAAA,EAAA,GAAA,GALU,UAKV,GALuB,OAKvB,CAL+B,UAK/B,CAAA;EAAO,UAAA,CAAA,EAAA,CAAA,QAAA,EAJK,YAIL,EAAA,GAAA,IAAA,GAJ6B,OAI7B,CAAA,IAAA,CAAA;EAeR,SAAA,CAAA,EAAA,CAAU,QAAA,EAjBT,YAiBS,EAAA,MAAA,EAhBX,iBAgBW,EAAA,GAAA,IAAA,GAfT,OAeS,CAAA,IAAA,CAAA;;AAGL,cAHL,UAAA,CAGK;EAAmB,iBAAA,MAAA;EAAR,WAAA,CAAA,MAAA,EAFU,gBAEV;EAAO,GAAA,CAAA,IAAA,EAAlB,QAAkB,CAAA,EAAP,OAAO,CAAC,aAAD,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import"../index.js";import{deepStrictEqual as e}from"node:assert";var t=class{constructor(e){this.config=e}async run(e){let t=[],n=0,r=0;for(let i of e.scenarios){await this.config.beforeEach?.(i);let a=await this.runScenario(e,i);t.push(a),a.status===`passed`?n+=1:r+=1,await this.config.afterEach?.(i,a)}return{spec:e,scenarios:t,passed:n,failed:r}}async runScenario(e,t){let n=[];try{let r=await this.createContext(),i=[...e.fixtures??[],...t.given??[]],a=[];for(let e of i)await this.executeOperation(e,r,a);let o=await this.executeOperation(t.when,r,a),s=t.then??[];for(let e of s){let t=this.evaluateAssertion(e,o,a);n.push(t)}return{scenario:t,status:n.some(e=>e.status===`failed`)?`failed`:`passed`,assertionResults:n}}catch(e){return{scenario:t,status:`failed`,error:e,assertionResults:n}}}async createContext(){return{...await this.config.createContext?.()??{}}}async executeOperation(e,t,n){let r={...t,eventPublisher:async e=>{n.push({name:e.name,version:e.version,payload:e.payload}),await t.eventPublisher?.(e)}};try{return{output:await this.config.registry.execute(e.operation.name,e.operation.version,e.input??null,r),events:n}}catch(e){return{error:e,events:n}}}evaluateAssertion(e,t,n){switch(e.type){case`expectOutput`:return this.evaluateOutputAssertion(e,t);case`expectError`:return this.evaluateErrorAssertion(e,t);case`expectEvents`:return this.evaluateEventsAssertion(e,n);default:return{assertion:e,status:`failed`,message:`Unknown assertion type ${e.type}`}}}evaluateOutputAssertion(t,n){if(n.error)return{assertion:t,status:`failed`,message:`Expected output but operation threw error: ${n.error.message}`};try{return e(n.output,t.match),{assertion:t,status:`passed`}}catch(e){return{assertion:t,status:`failed`,message:e instanceof Error?e.message:`Output assertion failed`}}}evaluateErrorAssertion(e,t){return t.error?e.messageIncludes&&!t.error.message.includes(e.messageIncludes)?{assertion:e,status:`failed`,message:`Error message "${t.error.message}" did not include expected substring "${e.messageIncludes}"`}:{assertion:e,status:`passed`}:{assertion:e,status:`failed`,message:`Expected an error but operation completed successfully`}}evaluateEventsAssertion(e,t){let n=[];for(let r of e.events){let e=t.filter(e=>e.name===r.name&&e.version===r.version).length;typeof r.min==`number`&&e<r.min||typeof r.max==`number`&&e>r.max?n.push(`Event ${r.name}.v${r.version} occurred ${e} times (expected ${r.min??0} - ${r.max??`∞`})`):r.min===void 0&&r.max===void 0&&e===0&&n.push(`Event ${r.name}.v${r.version} did not occur`)}return n.length>0?{assertion:e,status:`failed`,message:n.join(`; `)}:{assertion:e,status:`passed`}}};export{t as TestRunner};
|
|
2
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","names":["config: TestRunnerConfig","scenarios: ScenarioRunResult[]","assertionResults: AssertionResult[]","events: RecordedEvent[]","ctx: HandlerCtx","failures: string[]"],"sources":["../../src/tests/runner.ts"],"sourcesContent":["import { deepStrictEqual } from 'node:assert';\nimport { SpecRegistry } from '../index';\nimport type { HandlerCtx } from '../types';\nimport type {\n Action,\n Assertion,\n ExpectErrorAssertion,\n ExpectEventsAssertion,\n ExpectOutputAssertion,\n Fixture,\n TestScenario,\n TestSpec,\n} from './spec';\n\nexport interface ScenarioRunResult {\n scenario: TestScenario;\n status: 'passed' | 'failed';\n error?: Error;\n assertionResults: AssertionResult[];\n}\n\nexport interface AssertionResult {\n assertion: Assertion;\n status: 'passed' | 'failed';\n message?: string;\n}\n\nexport interface TestRunResult {\n spec: TestSpec;\n scenarios: ScenarioRunResult[];\n passed: number;\n failed: number;\n}\n\nexport interface TestRunnerConfig {\n registry: SpecRegistry;\n createContext?: () => HandlerCtx | Promise<HandlerCtx>;\n beforeEach?: (scenario: TestScenario) => void | Promise<void>;\n afterEach?: (\n scenario: TestScenario,\n result: ScenarioRunResult\n ) => void | Promise<void>;\n}\n\ninterface OperationResult {\n output?: unknown;\n error?: Error;\n events: RecordedEvent[];\n}\n\ninterface RecordedEvent {\n name: string;\n version: number;\n payload: unknown;\n}\n\nexport class TestRunner {\n constructor(private readonly config: TestRunnerConfig) {}\n\n async run(spec: TestSpec): Promise<TestRunResult> {\n const scenarios: ScenarioRunResult[] = [];\n let passed = 0;\n let failed = 0;\n\n for (const scenario of spec.scenarios) {\n await this.config.beforeEach?.(scenario);\n\n const result = await this.runScenario(spec, scenario);\n scenarios.push(result);\n if (result.status === 'passed') passed += 1;\n else failed += 1;\n\n await this.config.afterEach?.(scenario, result);\n }\n\n return {\n spec,\n scenarios,\n passed,\n failed,\n };\n }\n\n private async runScenario(\n spec: TestSpec,\n scenario: TestScenario\n ): Promise<ScenarioRunResult> {\n const assertionResults: AssertionResult[] = [];\n\n try {\n const context = await this.createContext();\n const fixtures = [...(spec.fixtures ?? []), ...(scenario.given ?? [])];\n const events: RecordedEvent[] = [];\n\n for (const fixture of fixtures) {\n await this.executeOperation(fixture, context, events);\n }\n\n const actionResult = await this.executeOperation(\n scenario.when,\n context,\n events\n );\n\n const assertions = scenario.then ?? [];\n for (const assertion of assertions) {\n const assertionResult = this.evaluateAssertion(\n assertion,\n actionResult,\n events\n );\n assertionResults.push(assertionResult);\n }\n\n const hasFailure = assertionResults.some(\n (assertion) => assertion.status === 'failed'\n );\n return {\n scenario,\n status: hasFailure ? 'failed' : 'passed',\n assertionResults,\n };\n } catch (error) {\n return {\n scenario,\n status: 'failed',\n error: error as Error,\n assertionResults,\n };\n }\n }\n\n private async createContext(): Promise<HandlerCtx> {\n const baseCtx = (await this.config.createContext?.()) ?? {};\n return { ...baseCtx };\n }\n\n private async executeOperation(\n action: Action | Fixture,\n baseCtx: HandlerCtx,\n recordedEvents: RecordedEvent[]\n ): Promise<OperationResult> {\n const ctx: HandlerCtx = {\n ...baseCtx,\n eventPublisher: async (event) => {\n recordedEvents.push({\n name: event.name,\n version: event.version,\n payload: event.payload,\n });\n await baseCtx.eventPublisher?.(event);\n },\n };\n\n try {\n const output = await this.config.registry.execute(\n action.operation.name,\n action.operation.version,\n action.input ?? null,\n ctx\n );\n return { output, events: recordedEvents };\n } catch (error) {\n return { error: error as Error, events: recordedEvents };\n }\n }\n\n private evaluateAssertion(\n assertion: Assertion,\n result: OperationResult,\n events: RecordedEvent[]\n ): AssertionResult {\n switch (assertion.type) {\n case 'expectOutput':\n return this.evaluateOutputAssertion(assertion, result);\n case 'expectError':\n return this.evaluateErrorAssertion(assertion, result);\n case 'expectEvents':\n return this.evaluateEventsAssertion(assertion, events);\n default:\n return {\n assertion,\n status: 'failed',\n message: `Unknown assertion type ${(assertion as Assertion).type}`,\n };\n }\n }\n\n private evaluateOutputAssertion(\n assertion: ExpectOutputAssertion,\n result: OperationResult\n ): AssertionResult {\n if (result.error) {\n return {\n assertion,\n status: 'failed',\n message: `Expected output but operation threw error: ${result.error.message}`,\n };\n }\n try {\n deepStrictEqual(result.output, assertion.match);\n return { assertion, status: 'passed' };\n } catch (error) {\n return {\n assertion,\n status: 'failed',\n message:\n error instanceof Error ? error.message : 'Output assertion failed',\n };\n }\n }\n\n private evaluateErrorAssertion(\n assertion: ExpectErrorAssertion,\n result: OperationResult\n ): AssertionResult {\n if (!result.error) {\n return {\n assertion,\n status: 'failed',\n message: 'Expected an error but operation completed successfully',\n };\n }\n if (\n assertion.messageIncludes &&\n !result.error.message.includes(assertion.messageIncludes)\n ) {\n return {\n assertion,\n status: 'failed',\n message: `Error message \"${result.error.message}\" did not include expected substring \"${assertion.messageIncludes}\"`,\n };\n }\n return { assertion, status: 'passed' };\n }\n\n private evaluateEventsAssertion(\n assertion: ExpectEventsAssertion,\n events: RecordedEvent[]\n ): AssertionResult {\n const failures: string[] = [];\n\n for (const expected of assertion.events) {\n const matches = events.filter(\n (event) =>\n event.name === expected.name && event.version === expected.version\n );\n const count = matches.length;\n if (\n (typeof expected.min === 'number' && count < expected.min) ||\n (typeof expected.max === 'number' && count > expected.max)\n ) {\n failures.push(\n `Event ${expected.name}.v${expected.version} occurred ${count} times (expected ${expected.min ?? 0} - ${expected.max ?? '∞'})`\n );\n } else if (\n typeof expected.min === 'undefined' &&\n typeof expected.max === 'undefined' &&\n count === 0\n ) {\n failures.push(\n `Event ${expected.name}.v${expected.version} did not occur`\n );\n }\n }\n\n if (failures.length > 0) {\n return {\n assertion,\n status: 'failed',\n message: failures.join('; '),\n };\n }\n return { assertion, status: 'passed' };\n }\n}\n\n"],"mappings":"kEAwDA,IAAa,EAAb,KAAwB,CACtB,YAAY,EAA2C,CAA1B,KAAA,OAAA,EAE7B,MAAM,IAAI,EAAwC,CAChD,IAAMC,EAAiC,EAAE,CACrC,EAAS,EACT,EAAS,EAEb,IAAK,IAAM,KAAY,EAAK,UAAW,CACrC,MAAM,KAAK,OAAO,aAAa,EAAS,CAExC,IAAM,EAAS,MAAM,KAAK,YAAY,EAAM,EAAS,CACrD,EAAU,KAAK,EAAO,CAClB,EAAO,SAAW,SAAU,GAAU,EACrC,GAAU,EAEf,MAAM,KAAK,OAAO,YAAY,EAAU,EAAO,CAGjD,MAAO,CACL,OACA,YACA,SACA,SACD,CAGH,MAAc,YACZ,EACA,EAC4B,CAC5B,IAAMC,EAAsC,EAAE,CAE9C,GAAI,CACF,IAAM,EAAU,MAAM,KAAK,eAAe,CACpC,EAAW,CAAC,GAAI,EAAK,UAAY,EAAE,CAAG,GAAI,EAAS,OAAS,EAAE,CAAE,CAChEC,EAA0B,EAAE,CAElC,IAAK,IAAM,KAAW,EACpB,MAAM,KAAK,iBAAiB,EAAS,EAAS,EAAO,CAGvD,IAAM,EAAe,MAAM,KAAK,iBAC9B,EAAS,KACT,EACA,EACD,CAEK,EAAa,EAAS,MAAQ,EAAE,CACtC,IAAK,IAAM,KAAa,EAAY,CAClC,IAAM,EAAkB,KAAK,kBAC3B,EACA,EACA,EACD,CACD,EAAiB,KAAK,EAAgB,CAMxC,MAAO,CACL,WACA,OALiB,EAAiB,KACjC,GAAc,EAAU,SAAW,SACrC,CAGsB,SAAW,SAChC,mBACD,OACM,EAAO,CACd,MAAO,CACL,WACA,OAAQ,SACD,QACP,mBACD,EAIL,MAAc,eAAqC,CAEjD,MAAO,CAAE,GADQ,MAAM,KAAK,OAAO,iBAAiB,EAAK,EAAE,CACtC,CAGvB,MAAc,iBACZ,EACA,EACA,EAC0B,CAC1B,IAAMC,EAAkB,CACtB,GAAG,EACH,eAAgB,KAAO,IAAU,CAC/B,EAAe,KAAK,CAClB,KAAM,EAAM,KACZ,QAAS,EAAM,QACf,QAAS,EAAM,QAChB,CAAC,CACF,MAAM,EAAQ,iBAAiB,EAAM,EAExC,CAED,GAAI,CAOF,MAAO,CAAE,OANM,MAAM,KAAK,OAAO,SAAS,QACxC,EAAO,UAAU,KACjB,EAAO,UAAU,QACjB,EAAO,OAAS,KAChB,EACD,CACgB,OAAQ,EAAgB,OAClC,EAAO,CACd,MAAO,CAAS,QAAgB,OAAQ,EAAgB,EAI5D,kBACE,EACA,EACA,EACiB,CACjB,OAAQ,EAAU,KAAlB,CACE,IAAK,eACH,OAAO,KAAK,wBAAwB,EAAW,EAAO,CACxD,IAAK,cACH,OAAO,KAAK,uBAAuB,EAAW,EAAO,CACvD,IAAK,eACH,OAAO,KAAK,wBAAwB,EAAW,EAAO,CACxD,QACE,MAAO,CACL,YACA,OAAQ,SACR,QAAS,0BAA2B,EAAwB,OAC7D,EAIP,wBACE,EACA,EACiB,CACjB,GAAI,EAAO,MACT,MAAO,CACL,YACA,OAAQ,SACR,QAAS,8CAA8C,EAAO,MAAM,UACrE,CAEH,GAAI,CAEF,OADA,EAAgB,EAAO,OAAQ,EAAU,MAAM,CACxC,CAAE,YAAW,OAAQ,SAAU,OAC/B,EAAO,CACd,MAAO,CACL,YACA,OAAQ,SACR,QACE,aAAiB,MAAQ,EAAM,QAAU,0BAC5C,EAIL,uBACE,EACA,EACiB,CAkBjB,OAjBK,EAAO,MAQV,EAAU,iBACV,CAAC,EAAO,MAAM,QAAQ,SAAS,EAAU,gBAAgB,CAElD,CACL,YACA,OAAQ,SACR,QAAS,kBAAkB,EAAO,MAAM,QAAQ,wCAAwC,EAAU,gBAAgB,GACnH,CAEI,CAAE,YAAW,OAAQ,SAAU,CAhB7B,CACL,YACA,OAAQ,SACR,QAAS,yDACV,CAeL,wBACE,EACA,EACiB,CACjB,IAAMC,EAAqB,EAAE,CAE7B,IAAK,IAAM,KAAY,EAAU,OAAQ,CAKvC,IAAM,EAJU,EAAO,OACpB,GACC,EAAM,OAAS,EAAS,MAAQ,EAAM,UAAY,EAAS,QAC9D,CACqB,OAEnB,OAAO,EAAS,KAAQ,UAAY,EAAQ,EAAS,KACrD,OAAO,EAAS,KAAQ,UAAY,EAAQ,EAAS,IAEtD,EAAS,KACP,SAAS,EAAS,KAAK,IAAI,EAAS,QAAQ,YAAY,EAAM,mBAAmB,EAAS,KAAO,EAAE,KAAK,EAAS,KAAO,IAAI,GAC7H,CAEM,EAAS,MAAQ,QACjB,EAAS,MAAQ,QACxB,IAAU,GAEV,EAAS,KACP,SAAS,EAAS,KAAK,IAAI,EAAS,QAAQ,gBAC7C,CAWL,OAPI,EAAS,OAAS,EACb,CACL,YACA,OAAQ,SACR,QAAS,EAAS,KAAK,KAAK,CAC7B,CAEI,CAAE,YAAW,OAAQ,SAAU"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { Owner, Stability, Tag } from "../ownership.js";
|
|
2
|
+
|
|
3
|
+
//#region src/tests/spec.d.ts
|
|
4
|
+
interface OperationTargetRef {
|
|
5
|
+
name: string;
|
|
6
|
+
version?: number;
|
|
7
|
+
}
|
|
8
|
+
interface WorkflowTargetRef {
|
|
9
|
+
name: string;
|
|
10
|
+
version?: number;
|
|
11
|
+
}
|
|
12
|
+
type TestTarget = {
|
|
13
|
+
type: 'contract';
|
|
14
|
+
operation: OperationTargetRef;
|
|
15
|
+
} | {
|
|
16
|
+
type: 'workflow';
|
|
17
|
+
workflow: WorkflowTargetRef;
|
|
18
|
+
};
|
|
19
|
+
interface Fixture {
|
|
20
|
+
description?: string;
|
|
21
|
+
operation: OperationTargetRef;
|
|
22
|
+
input?: unknown;
|
|
23
|
+
}
|
|
24
|
+
interface Action {
|
|
25
|
+
operation: OperationTargetRef;
|
|
26
|
+
input?: unknown;
|
|
27
|
+
}
|
|
28
|
+
interface ExpectOutputAssertion {
|
|
29
|
+
type: 'expectOutput';
|
|
30
|
+
match: unknown;
|
|
31
|
+
}
|
|
32
|
+
interface ExpectErrorAssertion {
|
|
33
|
+
type: 'expectError';
|
|
34
|
+
messageIncludes?: string;
|
|
35
|
+
}
|
|
36
|
+
interface ExpectedEvent {
|
|
37
|
+
name: string;
|
|
38
|
+
version: number;
|
|
39
|
+
min?: number;
|
|
40
|
+
max?: number;
|
|
41
|
+
}
|
|
42
|
+
interface ExpectEventsAssertion {
|
|
43
|
+
type: 'expectEvents';
|
|
44
|
+
events: ExpectedEvent[];
|
|
45
|
+
}
|
|
46
|
+
type Assertion = ExpectOutputAssertion | ExpectErrorAssertion | ExpectEventsAssertion;
|
|
47
|
+
interface TestScenario {
|
|
48
|
+
name: string;
|
|
49
|
+
description?: string;
|
|
50
|
+
given?: Fixture[];
|
|
51
|
+
when: Action;
|
|
52
|
+
then?: Assertion[];
|
|
53
|
+
}
|
|
54
|
+
interface CoverageRequirement {
|
|
55
|
+
statements?: number;
|
|
56
|
+
branches?: number;
|
|
57
|
+
functions?: number;
|
|
58
|
+
lines?: number;
|
|
59
|
+
mutations?: number;
|
|
60
|
+
}
|
|
61
|
+
interface TestSpecMeta {
|
|
62
|
+
name: string;
|
|
63
|
+
version: number;
|
|
64
|
+
title: string;
|
|
65
|
+
description?: string;
|
|
66
|
+
owners: Owner[];
|
|
67
|
+
tags: Tag[];
|
|
68
|
+
stability: Stability;
|
|
69
|
+
}
|
|
70
|
+
interface TestSpec {
|
|
71
|
+
meta: TestSpecMeta;
|
|
72
|
+
target: TestTarget;
|
|
73
|
+
fixtures?: Fixture[];
|
|
74
|
+
scenarios: TestScenario[];
|
|
75
|
+
coverage?: CoverageRequirement;
|
|
76
|
+
}
|
|
77
|
+
interface TestSpecRef {
|
|
78
|
+
name: string;
|
|
79
|
+
version?: number;
|
|
80
|
+
}
|
|
81
|
+
declare class TestRegistry {
|
|
82
|
+
private readonly items;
|
|
83
|
+
register(spec: TestSpec): this;
|
|
84
|
+
list(): TestSpec[];
|
|
85
|
+
get(name: string, version?: number): TestSpec | undefined;
|
|
86
|
+
}
|
|
87
|
+
declare function makeTestKey(meta: TestSpecMeta): string;
|
|
88
|
+
//#endregion
|
|
89
|
+
export { Action, Assertion, CoverageRequirement, ExpectErrorAssertion, ExpectEventsAssertion, ExpectOutputAssertion, ExpectedEvent, Fixture, OperationTargetRef, TestRegistry, TestScenario, TestSpec, TestSpecMeta, TestSpecRef, TestTarget, WorkflowTargetRef, makeTestKey };
|
|
90
|
+
//# sourceMappingURL=spec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec.d.ts","names":[],"sources":["../../src/tests/spec.ts"],"sourcesContent":[],"mappings":";;;UAEiB,kBAAA;;EAAA,OAAA,CAAA,EAAA,MAAA;AAKjB;AAKY,UALK,iBAAA,CAMkB;EAGlB,IAAA,EAAA,MAAO;EAMP,OAAA,CAAA,EAAM,MAAA;AAKvB;AAKiB,KApBL,UAAA,GAoBK;EAKA,IAAA,EAAA,UAAa;EAOb,SAAA,EA/BkB,kBA+BG;AAKtC,CAAA,GAAY;EACR,IAAA,EAAA,UAAA;EACA,QAAA,EArC8B,iBAqC9B;CACA;AAAqB,UApCR,OAAA,CAoCQ;EAER,WAAA,CAAA,EAAA,MAAY;EAGnB,SAAA,EAvCG,kBAuCH;EACF,KAAA,CAAA,EAAA,OAAA;;AACU,UArCD,MAAA,CAqCC;EAGD,SAAA,EAvCJ,kBAuCuB;EAQnB,KAAA,CAAA,EAAA,OAAY;;AAMrB,UAjDS,qBAAA,CAiDT;EACK,IAAA,EAAA,cAAA;EAAS,KAAA,EAAA,OAAA;AAGtB;AACQ,UAjDS,oBAAA,CAiDT;EACE,IAAA,EAAA,aAAA;EACG,eAAA,CAAA,EAAA,MAAA;;AAEA,UAhDI,aAAA,CAgDJ;EAAmB,IAAA,EAAA,MAAA;EAGf,OAAA,EAAA,MAAW;EAOf,GAAA,CAAA,EAAA,MAAA;EAGI,GAAA,CAAA,EAAA,MAAA;;AAasB,UAnEtB,qBAAA,CAmEsB;EAAQ,IAAA,EAAA,cAAA;EAiB/B,MAAA,EAlFN,aAkFiB,EAAA;;KA/Ef,SAAA,GACR,wBACA,uBACA;UAEa,YAAA;;;UAGP;QACF;SACC;;UAGQ,mBAAA;;;;;;;UAQA,YAAA;;;;;UAKP;QACF;aACK;;UAGI,QAAA;QACT;UACE;aACG;aACA;aACA;;UAGI,WAAA;;;;cAOJ,YAAA;;iBAGI;UASP;uCAI6B;;iBAiBvB,WAAA,OAAkB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=e=>`${e.name}.v${e.version}`;var t=class{items=new Map;register(t){let n=e(t.meta);if(this.items.has(n))throw Error(`Duplicate TestSpec registration for ${n}`);return this.items.set(n,t),this}list(){return[...this.items.values()]}get(e,t){if(t!=null)return this.items.get(`${e}.v${t}`);let n,r=-1/0;for(let t of this.items.values())t.meta.name===e&&t.meta.version>r&&(r=t.meta.version,n=t);return n}};function n(t){return e(t)}export{t as TestRegistry,n as makeTestKey};
|
|
2
|
+
//# sourceMappingURL=spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec.js","names":["latest: TestSpec | undefined"],"sources":["../../src/tests/spec.ts"],"sourcesContent":["import type { Owner, Stability, Tag } from '../ownership';\n\nexport interface OperationTargetRef {\n name: string;\n version?: number;\n}\n\nexport interface WorkflowTargetRef {\n name: string;\n version?: number;\n}\n\nexport type TestTarget =\n | { type: 'contract'; operation: OperationTargetRef }\n | { type: 'workflow'; workflow: WorkflowTargetRef };\n\nexport interface Fixture {\n description?: string;\n operation: OperationTargetRef;\n input?: unknown;\n}\n\nexport interface Action {\n operation: OperationTargetRef;\n input?: unknown;\n}\n\nexport interface ExpectOutputAssertion {\n type: 'expectOutput';\n match: unknown;\n}\n\nexport interface ExpectErrorAssertion {\n type: 'expectError';\n messageIncludes?: string;\n}\n\nexport interface ExpectedEvent {\n name: string;\n version: number;\n min?: number;\n max?: number;\n}\n\nexport interface ExpectEventsAssertion {\n type: 'expectEvents';\n events: ExpectedEvent[];\n}\n\nexport type Assertion =\n | ExpectOutputAssertion\n | ExpectErrorAssertion\n | ExpectEventsAssertion;\n\nexport interface TestScenario {\n name: string;\n description?: string;\n given?: Fixture[];\n when: Action;\n then?: Assertion[];\n}\n\nexport interface CoverageRequirement {\n statements?: number;\n branches?: number;\n functions?: number;\n lines?: number;\n mutations?: number;\n}\n\nexport interface TestSpecMeta {\n name: string;\n version: number;\n title: string;\n description?: string;\n owners: Owner[];\n tags: Tag[];\n stability: Stability;\n}\n\nexport interface TestSpec {\n meta: TestSpecMeta;\n target: TestTarget;\n fixtures?: Fixture[];\n scenarios: TestScenario[];\n coverage?: CoverageRequirement;\n}\n\nexport interface TestSpecRef {\n name: string;\n version?: number;\n}\n\nconst testKey = (meta: TestSpecMeta) => `${meta.name}.v${meta.version}`;\n\nexport class TestRegistry {\n private readonly items = new Map<string, TestSpec>();\n\n register(spec: TestSpec): this {\n const key = testKey(spec.meta);\n if (this.items.has(key)) {\n throw new Error(`Duplicate TestSpec registration for ${key}`);\n }\n this.items.set(key, spec);\n return this;\n }\n\n list(): TestSpec[] {\n return [...this.items.values()];\n }\n\n get(name: string, version?: number): TestSpec | undefined {\n if (version != null) {\n return this.items.get(`${name}.v${version}`);\n }\n let latest: TestSpec | undefined;\n let maxVersion = -Infinity;\n for (const spec of this.items.values()) {\n if (spec.meta.name !== name) continue;\n if (spec.meta.version > maxVersion) {\n maxVersion = spec.meta.version;\n latest = spec;\n }\n }\n return latest;\n }\n}\n\nexport function makeTestKey(meta: TestSpecMeta) {\n return testKey(meta);\n}\n\n"],"mappings":"AA6FA,MAAM,EAAW,GAAuB,GAAG,EAAK,KAAK,IAAI,EAAK,UAE9D,IAAa,EAAb,KAA0B,CACxB,MAAyB,IAAI,IAE7B,SAAS,EAAsB,CAC7B,IAAM,EAAM,EAAQ,EAAK,KAAK,CAC9B,GAAI,KAAK,MAAM,IAAI,EAAI,CACrB,MAAU,MAAM,uCAAuC,IAAM,CAG/D,OADA,KAAK,MAAM,IAAI,EAAK,EAAK,CAClB,KAGT,MAAmB,CACjB,MAAO,CAAC,GAAG,KAAK,MAAM,QAAQ,CAAC,CAGjC,IAAI,EAAc,EAAwC,CACxD,GAAI,GAAW,KACb,OAAO,KAAK,MAAM,IAAI,GAAG,EAAK,IAAI,IAAU,CAE9C,IAAIA,EACA,EAAa,KACjB,IAAK,IAAM,KAAQ,KAAK,MAAM,QAAQ,CAChC,EAAK,KAAK,OAAS,GACnB,EAAK,KAAK,QAAU,IACtB,EAAa,EAAK,KAAK,QACvB,EAAS,GAGb,OAAO,IAIX,SAAgB,EAAY,EAAoB,CAC9C,OAAO,EAAQ,EAAK"}
|
package/dist/themes.d.ts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { OwnerShipMeta } from "./ownership.js";
|
|
2
|
+
|
|
3
|
+
//#region src/themes.d.ts
|
|
4
|
+
type ThemeScope = 'global' | 'tenant' | 'user';
|
|
5
|
+
interface ThemeToken<T> {
|
|
6
|
+
value: T;
|
|
7
|
+
description?: string;
|
|
8
|
+
}
|
|
9
|
+
interface ThemeTokens {
|
|
10
|
+
colors?: Record<string, ThemeToken<string>>;
|
|
11
|
+
radii?: Record<string, ThemeToken<number>>;
|
|
12
|
+
space?: Record<string, ThemeToken<number>>;
|
|
13
|
+
typography?: Record<string, ThemeToken<number>>;
|
|
14
|
+
shadows?: Record<string, ThemeToken<string>>;
|
|
15
|
+
motion?: Record<string, ThemeToken<string>>;
|
|
16
|
+
}
|
|
17
|
+
interface ComponentVariantDefinition {
|
|
18
|
+
props?: Record<string, unknown>;
|
|
19
|
+
tokens?: ThemeTokens;
|
|
20
|
+
}
|
|
21
|
+
interface ComponentVariantSpec {
|
|
22
|
+
component: string;
|
|
23
|
+
variants: Record<string, ComponentVariantDefinition>;
|
|
24
|
+
}
|
|
25
|
+
interface ThemeOverride {
|
|
26
|
+
scope: ThemeScope;
|
|
27
|
+
target: string;
|
|
28
|
+
tokens?: ThemeTokens;
|
|
29
|
+
components?: ComponentVariantSpec[];
|
|
30
|
+
}
|
|
31
|
+
interface ThemeMeta extends OwnerShipMeta {
|
|
32
|
+
name: string;
|
|
33
|
+
version: number;
|
|
34
|
+
extends?: ThemeRef;
|
|
35
|
+
scopes?: ThemeScope[];
|
|
36
|
+
}
|
|
37
|
+
interface ThemeSpec {
|
|
38
|
+
meta: ThemeMeta;
|
|
39
|
+
tokens: ThemeTokens;
|
|
40
|
+
components?: ComponentVariantSpec[];
|
|
41
|
+
overrides?: ThemeOverride[];
|
|
42
|
+
}
|
|
43
|
+
interface ThemeRef {
|
|
44
|
+
name: string;
|
|
45
|
+
version: number;
|
|
46
|
+
}
|
|
47
|
+
declare class ThemeRegistry {
|
|
48
|
+
private readonly items;
|
|
49
|
+
register(spec: ThemeSpec): this;
|
|
50
|
+
list(): ThemeSpec[];
|
|
51
|
+
get(name: string, version?: number): ThemeSpec | undefined;
|
|
52
|
+
}
|
|
53
|
+
declare function makeThemeRef(spec: ThemeSpec): ThemeRef;
|
|
54
|
+
//#endregion
|
|
55
|
+
export { ComponentVariantDefinition, ComponentVariantSpec, ThemeMeta, ThemeOverride, ThemeRef, ThemeRegistry, ThemeScope, ThemeSpec, ThemeToken, ThemeTokens, makeThemeRef };
|
|
56
|
+
//# sourceMappingURL=themes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"themes.d.ts","names":[],"sources":["../src/themes.ts"],"sourcesContent":[],"mappings":";;;KAEY,UAAA;UAEK;EAFL,KAAA,EAGH,CAHG;EAEK,WAAA,CAAA,EAAU,MAAA;AAK3B;AAC0B,UADT,WAAA,CACS;EAAf,MAAA,CAAA,EAAA,MAAA,CAAA,MAAA,EAAe,UAAf,CAAA,MAAA,CAAA,CAAA;EACc,KAAA,CAAA,EAAf,MAAe,CAAA,MAAA,EAAA,UAAA,CAAA,MAAA,CAAA,CAAA;EAAf,KAAA,CAAA,EACA,MADA,CAAA,MAAA,EACe,UADf,CAAA,MAAA,CAAA,CAAA;EACe,UAAA,CAAA,EACV,MADU,CAAA,MAAA,EACK,UADL,CAAA,MAAA,CAAA,CAAA;EAAf,OAAA,CAAA,EAEE,MAFF,CAAA,MAAA,EAEiB,UAFjB,CAAA,MAAA,CAAA,CAAA;EACoB,MAAA,CAAA,EAEnB,MAFmB,CAAA,MAAA,EAEJ,UAFI,CAAA,MAAA,CAAA,CAAA;;AACH,UAIV,0BAAA,CAJU;EAAf,KAAA,CAAA,EAKF,MALE,CAAA,MAAA,EAAA,OAAA,CAAA;EACc,MAAA,CAAA,EAKf,WALe;;AAAT,UAQA,oBAAA,CARA;EAGA,SAAA,EAAA,MAAA;EAKA,QAAA,EAEL,MAFK,CAAA,MAAoB,EAEV,0BAAA,CAAA;AAG3B;AACS,UADQ,aAAA,CACR;EAEE,KAAA,EAFF,UAEE;EACI,MAAA,EAAA,MAAA;EAAoB,MAAA,CAAA,EADxB,WACwB;EAGlB,UAAA,CAAA,EAHF,oBAGY,EAAA;;AAIhB,UAJM,SAAA,SAAkB,aAIxB,CAAA;EAJwB,IAAA,EAAA,MAAA;EAAa,OAAA,EAAA,MAAA;EAO/B,OAAA,CAAA,EAJL,QAIc;EAClB,MAAA,CAAA,EAJG,UAIH,EAAA;;AAEO,UAHE,SAAA,CAGF;EACD,IAAA,EAHN,SAGM;EAAa,MAAA,EAFjB,WAEiB;EAGV,UAAA,CAAQ,EAJV,oBAIU,EAAA;EAQZ,SAAA,CAAA,EAXC,aAWY,EAAA;;AAWhB,UAnBO,QAAA,CAmBP;EAI6B,IAAA,EAAA,MAAA;EAAS,OAAA,EAAA,MAAA;AAehD;cA9Ba,aAAA;;iBAGI;UAQP;uCAI6B;;iBAevB,YAAA,OAAmB,YAAY"}
|
package/dist/themes.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=e=>`${e.name}.v${e.version}`;var t=class{items=new Map;register(t){let n=e(t.meta);if(this.items.has(n))throw Error(`Duplicate theme ${n}`);return this.items.set(n,t),this}list(){return[...this.items.values()]}get(t,n){if(n!=null)return this.items.get(e({name:t,version:n}));let r,i=-1/0;for(let e of this.items.values())e.meta.name===t&&e.meta.version>i&&(i=e.meta.version,r=e);return r}};function n(e){return{name:e.meta.name,version:e.meta.version}}export{t as ThemeRegistry,n as makeThemeRef};
|
|
2
|
+
//# sourceMappingURL=themes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"themes.js","names":["candidate: ThemeSpec | undefined"],"sources":["../src/themes.ts"],"sourcesContent":["import type { OwnerShipMeta } from './ownership';\n\nexport type ThemeScope = 'global' | 'tenant' | 'user';\n\nexport interface ThemeToken<T> {\n value: T;\n description?: string;\n}\n\nexport interface ThemeTokens {\n colors?: Record<string, ThemeToken<string>>;\n radii?: Record<string, ThemeToken<number>>;\n space?: Record<string, ThemeToken<number>>;\n typography?: Record<string, ThemeToken<number>>;\n shadows?: Record<string, ThemeToken<string>>;\n motion?: Record<string, ThemeToken<string>>;\n}\n\nexport interface ComponentVariantDefinition {\n props?: Record<string, unknown>;\n tokens?: ThemeTokens;\n}\n\nexport interface ComponentVariantSpec {\n component: string;\n variants: Record<string, ComponentVariantDefinition>;\n}\n\nexport interface ThemeOverride {\n scope: ThemeScope;\n target: string;\n tokens?: ThemeTokens;\n components?: ComponentVariantSpec[];\n}\n\nexport interface ThemeMeta extends OwnerShipMeta {\n name: string;\n version: number;\n extends?: ThemeRef;\n scopes?: ThemeScope[];\n}\n\nexport interface ThemeSpec {\n meta: ThemeMeta;\n tokens: ThemeTokens;\n components?: ComponentVariantSpec[];\n overrides?: ThemeOverride[];\n}\n\nexport interface ThemeRef {\n name: string;\n version: number;\n}\n\nconst themeKey = (ref: ThemeRef | ThemeMeta) =>\n `${ref.name}.v${ref.version}`;\n\nexport class ThemeRegistry {\n private readonly items = new Map<string, ThemeSpec>();\n\n register(spec: ThemeSpec): this {\n const key = themeKey(spec.meta);\n if (this.items.has(key))\n throw new Error(`Duplicate theme ${key}`);\n this.items.set(key, spec);\n return this;\n }\n\n list(): ThemeSpec[] {\n return [...this.items.values()];\n }\n\n get(name: string, version?: number): ThemeSpec | undefined {\n if (version != null) return this.items.get(themeKey({ name, version }));\n let candidate: ThemeSpec | undefined;\n let max = -Infinity;\n for (const spec of this.items.values()) {\n if (spec.meta.name !== name) continue;\n if (spec.meta.version > max) {\n max = spec.meta.version;\n candidate = spec;\n }\n }\n return candidate;\n }\n}\n\nexport function makeThemeRef(spec: ThemeSpec): ThemeRef {\n return { name: spec.meta.name, version: spec.meta.version };\n}\n\n"],"mappings":"AAsDA,MAAM,EAAY,GAChB,GAAG,EAAI,KAAK,IAAI,EAAI,UAEtB,IAAa,EAAb,KAA2B,CACzB,MAAyB,IAAI,IAE7B,SAAS,EAAuB,CAC9B,IAAM,EAAM,EAAS,EAAK,KAAK,CAC/B,GAAI,KAAK,MAAM,IAAI,EAAI,CACrB,MAAU,MAAM,mBAAmB,IAAM,CAE3C,OADA,KAAK,MAAM,IAAI,EAAK,EAAK,CAClB,KAGT,MAAoB,CAClB,MAAO,CAAC,GAAG,KAAK,MAAM,QAAQ,CAAC,CAGjC,IAAI,EAAc,EAAyC,CACzD,GAAI,GAAW,KAAM,OAAO,KAAK,MAAM,IAAI,EAAS,CAAE,OAAM,UAAS,CAAC,CAAC,CACvE,IAAIA,EACA,EAAM,KACV,IAAK,IAAM,KAAQ,KAAK,MAAM,QAAQ,CAChC,EAAK,KAAK,OAAS,GACnB,EAAK,KAAK,QAAU,IACtB,EAAM,EAAK,KAAK,QAChB,EAAY,GAGhB,OAAO,IAIX,SAAgB,EAAa,EAA2B,CACtD,MAAO,CAAE,KAAM,EAAK,KAAK,KAAM,QAAS,EAAK,KAAK,QAAS"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
//#region src/translations/catalog.d.ts
|
|
2
|
+
type Locale = string;
|
|
3
|
+
type MessageKey = string;
|
|
4
|
+
interface TranslationEntry {
|
|
5
|
+
key: MessageKey;
|
|
6
|
+
locale: Locale;
|
|
7
|
+
value: string;
|
|
8
|
+
context?: string;
|
|
9
|
+
}
|
|
10
|
+
interface TranslationCatalogMeta {
|
|
11
|
+
name: string;
|
|
12
|
+
version: number;
|
|
13
|
+
description?: string;
|
|
14
|
+
}
|
|
15
|
+
interface PlatformTranslationCatalog {
|
|
16
|
+
meta: TranslationCatalogMeta;
|
|
17
|
+
defaultLocale: Locale;
|
|
18
|
+
supportedLocales: Locale[];
|
|
19
|
+
entries: TranslationEntry[];
|
|
20
|
+
}
|
|
21
|
+
interface BlueprintTranslationCatalog {
|
|
22
|
+
meta: TranslationCatalogMeta;
|
|
23
|
+
defaultLocale: Locale;
|
|
24
|
+
supportedLocales: Locale[];
|
|
25
|
+
entries: TranslationEntry[];
|
|
26
|
+
}
|
|
27
|
+
//#endregion
|
|
28
|
+
export { BlueprintTranslationCatalog, Locale, MessageKey, PlatformTranslationCatalog, TranslationCatalogMeta, TranslationEntry };
|
|
29
|
+
//# sourceMappingURL=catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","names":[],"sources":["../../src/translations/catalog.ts"],"sourcesContent":[],"mappings":";KAAY,MAAA;AAAA,KACA,UAAA,GADM,MAAA;AACN,UAEK,gBAAA,CAFK;EAEL,GAAA,EACV,UADU;EAOA,MAAA,EALP,MAKO;EAMA,KAAA,EAAA,MAAA;EACT,OAAA,CAAA,EAAA,MAAA;;AAEY,UATH,sBAAA,CASG;EACT,IAAA,EAAA,MAAA;EAAgB,OAAA,EAAA,MAAA;EAGV,WAAA,CAAA,EAAA,MAAA;;AAEA,UATA,0BAAA,CASA;EACG,IAAA,EATZ,sBASY;EACT,aAAA,EATM,MASN;EAAgB,gBAAA,EARP,MAQO,EAAA;WAPhB;;UAGM,2BAAA;QACT;iBACS;oBACG;WACT"}
|
|
File without changes
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Locale, TranslationEntry } from "./catalog.js";
|
|
2
|
+
|
|
3
|
+
//#region src/translations/tenant.d.ts
|
|
4
|
+
interface TenantTranslationOverride {
|
|
5
|
+
tenantId: string;
|
|
6
|
+
appId: string;
|
|
7
|
+
blueprintName: string;
|
|
8
|
+
blueprintVersion: number;
|
|
9
|
+
entries: TranslationEntry[];
|
|
10
|
+
defaultLocale?: Locale;
|
|
11
|
+
enabledLocales?: Locale[];
|
|
12
|
+
updatedAt?: string;
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
export { TenantTranslationOverride };
|
|
16
|
+
//# sourceMappingURL=tenant.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant.d.ts","names":[],"sources":["../../src/translations/tenant.ts"],"sourcesContent":[],"mappings":";;;UAEiB,yBAAA;;EAAA,KAAA,EAAA,MAAA;EAKN,aAAA,EAAA,MAAA;EACO,gBAAA,EAAA,MAAA;EACC,OAAA,EAFR,gBAEQ,EAAA;EAAM,aAAA,CAAA,EADP,MACO;mBAAN"}
|
|
File without changes
|