@contractspec/lib.contracts 1.44.0 → 1.45.0

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.
Files changed (163) hide show
  1. package/README.md +1 -1
  2. package/dist/app-config/app-config.feature.js +6 -6
  3. package/dist/app-config/contracts.d.ts +50 -50
  4. package/dist/app-config/contracts.js +13 -13
  5. package/dist/app-config/events.d.ts +27 -27
  6. package/dist/app-config/events.js +12 -12
  7. package/dist/app-config/lifecycle-contracts.d.ts +54 -54
  8. package/dist/app-config/lifecycle-contracts.js +19 -19
  9. package/dist/app-config/lifecycle.d.ts +2 -2
  10. package/dist/app-config/runtime.d.ts +3 -3
  11. package/dist/app-config/spec.d.ts +10 -12
  12. package/dist/app-config/spec.js +5 -26
  13. package/dist/capabilities/capabilities.d.ts +4 -11
  14. package/dist/capabilities/capabilities.js +3 -5
  15. package/dist/capabilities/openbanking.js +10 -10
  16. package/dist/client/react/form-render.js +1 -0
  17. package/dist/contract-registry/schemas.d.ts +8 -8
  18. package/dist/contract-registry/schemas.js +1 -1
  19. package/dist/contract-registry/types.d.ts +1 -1
  20. package/dist/data-views/data-views.js +1 -0
  21. package/dist/data-views/registry.d.ts +3 -37
  22. package/dist/data-views/registry.js +4 -66
  23. package/dist/data-views/runtime.d.ts +1 -1
  24. package/dist/data-views/runtime.js +2 -0
  25. package/dist/data-views/spec.d.ts +2 -2
  26. package/dist/docs/index.d.ts +2 -2
  27. package/dist/docs/index.js +2 -2
  28. package/dist/docs/presentations.d.ts +2 -4
  29. package/dist/docs/presentations.js +2 -4
  30. package/dist/docs/tech/contracts/ops-to-presentation-linking.docblock.js +1 -1
  31. package/dist/docs/tech/contracts/tests.docblock.js +1 -1
  32. package/dist/docs/tech/lifecycle-stage-system.docblock.js +1 -1
  33. package/dist/docs/tech-contracts.docs.js +1 -1
  34. package/dist/docs/types.d.ts +1 -1
  35. package/dist/events.d.ts +3 -3
  36. package/dist/examples/docs/examples.docblock.d.ts +6 -0
  37. package/dist/examples/docs/examples.docblock.js +165 -0
  38. package/dist/examples/index.d.ts +5 -0
  39. package/dist/examples/index.js +6 -0
  40. package/dist/examples/registry.d.ts +65 -0
  41. package/dist/examples/registry.js +144 -0
  42. package/dist/examples/schema.d.ts +282 -0
  43. package/dist/examples/schema.js +125 -0
  44. package/dist/examples/types.d.ts +167 -0
  45. package/dist/examples/types.js +43 -0
  46. package/dist/examples/validation.d.ts +65 -0
  47. package/dist/examples/validation.js +144 -0
  48. package/dist/experiments/docs/experiments.docblock.js +1 -1
  49. package/dist/experiments/evaluator.d.ts +1 -1
  50. package/dist/experiments/spec-resolver.d.ts +2 -2
  51. package/dist/experiments/spec.d.ts +6 -8
  52. package/dist/experiments/spec.js +5 -23
  53. package/dist/features/index.d.ts +9 -1
  54. package/dist/features/index.js +8 -1
  55. package/dist/features/install.js +2 -2
  56. package/dist/features/types.d.ts +7 -7
  57. package/dist/forms/forms.d.ts +2 -2
  58. package/dist/forms/forms.js +3 -6
  59. package/dist/index.d.ts +13 -8
  60. package/dist/index.js +11 -2
  61. package/dist/install.d.ts +9 -9
  62. package/dist/integrations/connection.d.ts +1 -1
  63. package/dist/integrations/docs/integrations.docblock.js +1 -1
  64. package/dist/integrations/integrations.feature.js +8 -8
  65. package/dist/integrations/openbanking/contracts/accounts.d.ts +66 -66
  66. package/dist/integrations/openbanking/contracts/accounts.js +3 -3
  67. package/dist/integrations/openbanking/contracts/balances.d.ts +34 -34
  68. package/dist/integrations/openbanking/contracts/balances.js +2 -2
  69. package/dist/integrations/openbanking/contracts/transactions.d.ts +48 -48
  70. package/dist/integrations/openbanking/contracts/transactions.js +2 -2
  71. package/dist/integrations/openbanking/models.d.ts +55 -55
  72. package/dist/integrations/openbanking/openbanking.feature.js +10 -10
  73. package/dist/integrations/operations.d.ts +102 -102
  74. package/dist/integrations/operations.js +10 -10
  75. package/dist/integrations/providers/elevenlabs.js +2 -2
  76. package/dist/integrations/providers/gcs-storage.js +2 -2
  77. package/dist/integrations/providers/gmail.js +3 -3
  78. package/dist/integrations/providers/google-calendar.js +2 -2
  79. package/dist/integrations/providers/mistral.js +3 -3
  80. package/dist/integrations/providers/postmark.js +2 -2
  81. package/dist/integrations/providers/powens.js +4 -4
  82. package/dist/integrations/providers/qdrant.js +3 -3
  83. package/dist/integrations/providers/stripe.js +2 -2
  84. package/dist/integrations/providers/twilio-sms.js +2 -2
  85. package/dist/integrations/runtime.d.ts +5 -5
  86. package/dist/integrations/spec.d.ts +3 -5
  87. package/dist/integrations/spec.js +5 -26
  88. package/dist/jobs/gcp-cloud-tasks.js +1 -1
  89. package/dist/jobs/gcp-pubsub.js +1 -1
  90. package/dist/jobs/handlers/ping-handler.d.ts +3 -3
  91. package/dist/jobs/handlers/ping-handler.js +2 -2
  92. package/dist/jobs/memory-queue.js +1 -1
  93. package/dist/jobs/queue.d.ts +4 -4
  94. package/dist/jobs/scaleway-sqs-queue.js +2 -2
  95. package/dist/jsonschema.d.ts +4 -4
  96. package/dist/knowledge/binding.d.ts +1 -1
  97. package/dist/knowledge/knowledge.feature.js +8 -8
  98. package/dist/knowledge/operations.d.ts +66 -66
  99. package/dist/knowledge/operations.js +12 -12
  100. package/dist/knowledge/source.d.ts +1 -1
  101. package/dist/knowledge/spaces/email-threads.js +2 -2
  102. package/dist/knowledge/spaces/financial-docs.js +2 -2
  103. package/dist/knowledge/spaces/financial-overview.js +2 -2
  104. package/dist/knowledge/spaces/product-canon.js +2 -2
  105. package/dist/knowledge/spaces/support-faq.js +2 -2
  106. package/dist/knowledge/spaces/uploaded-docs.js +2 -2
  107. package/dist/knowledge/spec.d.ts +3 -5
  108. package/dist/knowledge/spec.js +6 -28
  109. package/dist/llm/exporters.js +2 -2
  110. package/dist/llm/types.d.ts +4 -4
  111. package/dist/markdown.js +1 -1
  112. package/dist/migrations.d.ts +2 -2
  113. package/dist/migrations.js +7 -9
  114. package/dist/onboarding-base.d.ts +29 -29
  115. package/dist/onboarding-base.js +4 -4
  116. package/dist/openapi.js +9 -2
  117. package/dist/operations/operation.d.ts +3 -3
  118. package/dist/operations/registry.d.ts +9 -58
  119. package/dist/operations/registry.js +17 -93
  120. package/dist/ownership.d.ts +1 -1
  121. package/dist/policy/docs/policy.docblock.js +1 -1
  122. package/dist/policy/engine.js +2 -0
  123. package/dist/policy/spec.d.ts +1 -1
  124. package/dist/prompt.d.ts +6 -6
  125. package/dist/promptRegistry.d.ts +4 -4
  126. package/dist/promptRegistry.js +2 -5
  127. package/dist/regenerator/docs/regenerator.docblock.js +1 -1
  128. package/dist/regenerator/types.d.ts +1 -1
  129. package/dist/registry.d.ts +3 -2
  130. package/dist/registry.js +5 -5
  131. package/dist/resources.d.ts +5 -5
  132. package/dist/server/graphql-pothos.js +2 -2
  133. package/dist/server/mcp/registerTools.js +1 -1
  134. package/dist/server/rest-elysia.d.ts +1 -1
  135. package/dist/server/rest-elysia.js +1 -1
  136. package/dist/server/rest-express.d.ts +1 -1
  137. package/dist/server/rest-express.js +1 -1
  138. package/dist/server/rest-generic.d.ts +1 -1
  139. package/dist/server/rest-generic.js +1 -1
  140. package/dist/server/rest-next-app.d.ts +1 -1
  141. package/dist/server/rest-next-mcp.d.ts +1 -1
  142. package/dist/server/rest-next-mcp.js +1 -1
  143. package/dist/server/rest-next-pages.d.ts +1 -1
  144. package/dist/telemetry/docs/telemetry.docblock.js +1 -1
  145. package/dist/telemetry/spec.d.ts +7 -7
  146. package/dist/telemetry/spec.js +17 -44
  147. package/dist/telemetry/tracker.d.ts +2 -2
  148. package/dist/tests/runner.d.ts +1 -1
  149. package/dist/tests/spec.d.ts +5 -5
  150. package/dist/tests/spec.js +3 -5
  151. package/dist/themes.d.ts +4 -6
  152. package/dist/themes.js +5 -27
  153. package/dist/translations/catalog.d.ts +1 -1
  154. package/dist/types.d.ts +5 -5
  155. package/dist/workflow/adapters/db-adapter.js +3 -3
  156. package/dist/workflow/runner.d.ts +4 -2
  157. package/dist/workflow/spec.d.ts +4 -17
  158. package/dist/workflow/spec.js +4 -48
  159. package/dist/workflow/state.d.ts +1 -1
  160. package/dist/workflow/validation.js +1 -1
  161. package/dist/workspace-config/contractsrc-schema.d.ts +419 -419
  162. package/dist/workspace-config/contractsrc-schema.js +86 -86
  163. package/package.json +28 -12
package/dist/themes.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { OwnerShipMeta } from "./ownership.js";
2
+ import { SpecContractRegistry } from "./registry.js";
2
3
 
3
4
  //#region src/themes.d.ts
4
5
  type ThemeScope = 'global' | 'tenant' | 'user';
@@ -40,13 +41,10 @@ interface ThemeSpec {
40
41
  }
41
42
  interface ThemeRef {
42
43
  key: string;
43
- version: number;
44
+ version: string;
44
45
  }
45
- declare class ThemeRegistry {
46
- private readonly items;
47
- register(spec: ThemeSpec): this;
48
- list(): ThemeSpec[];
49
- get(key: string, version?: number): ThemeSpec | undefined;
46
+ declare class ThemeRegistry extends SpecContractRegistry<'theme', ThemeSpec> {
47
+ constructor(items?: ThemeSpec[]);
50
48
  }
51
49
  declare function makeThemeRef(spec: ThemeSpec): ThemeRef;
52
50
  //#endregion
package/dist/themes.js CHANGED
@@ -1,31 +1,9 @@
1
+ import { SpecContractRegistry } from "./registry.js";
2
+
1
3
  //#region src/themes.ts
2
- const themeKey = (ref) => `${ref.key}.v${ref.version}`;
3
- var ThemeRegistry = class {
4
- items = /* @__PURE__ */ new Map();
5
- register(spec) {
6
- const key = themeKey(spec.meta);
7
- if (this.items.has(key)) throw new Error(`Duplicate theme ${key}`);
8
- this.items.set(key, spec);
9
- return this;
10
- }
11
- list() {
12
- return [...this.items.values()];
13
- }
14
- get(key, version) {
15
- if (version != null) return this.items.get(themeKey({
16
- key,
17
- version
18
- }));
19
- let candidate;
20
- let max = -Infinity;
21
- for (const spec of this.items.values()) {
22
- if (spec.meta.key !== key) continue;
23
- if (spec.meta.version > max) {
24
- max = spec.meta.version;
25
- candidate = spec;
26
- }
27
- }
28
- return candidate;
4
+ var ThemeRegistry = class extends SpecContractRegistry {
5
+ constructor(items) {
6
+ super("theme", items);
29
7
  }
30
8
  };
31
9
  function makeThemeRef(spec) {
@@ -9,7 +9,7 @@ interface TranslationEntry {
9
9
  }
10
10
  interface TranslationCatalogMeta {
11
11
  key: string;
12
- version: number;
12
+ version: string;
13
13
  description?: string;
14
14
  }
15
15
  interface PlatformTranslationCatalog {
package/dist/types.d.ts CHANGED
@@ -5,8 +5,8 @@ import { ResolvedBranding } from "./app-config/branding.js";
5
5
  import { Locale, MessageKey } from "./translations/catalog.js";
6
6
  import { ResolvedAppConfig, ResolvedIntegration, ResolvedKnowledge, ResolvedTranslation } from "./app-config/runtime.js";
7
7
  import { SecretProvider } from "./integrations/secrets/provider.js";
8
- import { SpecVariantResolver } from "./experiments/spec-resolver.js";
9
8
  import { EventRegistry } from "./events.js";
9
+ import { SpecVariantResolver } from "./experiments/spec-resolver.js";
10
10
 
11
11
  //#region src/types.d.ts
12
12
  /**
@@ -14,7 +14,7 @@ import { EventRegistry } from "./events.js";
14
14
  */
15
15
  type Actor = 'anonymous' | 'user' | 'admin';
16
16
  type Channel = 'web' | 'mobile' | 'job' | 'agent';
17
- type ContractSpecType = 'app-config' | 'capability' | 'data-view' | 'experiment' | 'form' | 'integration' | 'knowledge' | 'operation' | 'policy' | 'presentation' | 'telemetry' | 'workflow' | 'event' | 'feature' | 'migration';
17
+ type ContractSpecType = 'app-config' | 'agent' | 'operation' | 'event' | 'presentation' | 'capability' | 'integration' | 'data-view' | 'feature' | 'workflow' | 'policy' | 'theme' | 'telemetry' | 'experiment' | 'knowledge-space';
18
18
  interface FieldLevelDecision {
19
19
  field: string;
20
20
  effect: 'allow' | 'deny';
@@ -33,7 +33,7 @@ interface PolicyDecision {
33
33
  interface PolicyDeciderInput {
34
34
  service: string;
35
35
  command: string;
36
- version: number;
36
+ version: string;
37
37
  actor: Actor;
38
38
  channel?: Channel;
39
39
  roles?: string[];
@@ -47,7 +47,7 @@ type TranslationResolver = (key: MessageKey, locale?: Locale) => Promise<string
47
47
  /** Outbox/bus event publisher (after validation & guarding) */
48
48
  type EventPublisher = (envelope: {
49
49
  key: string;
50
- version: number;
50
+ version: string;
51
51
  payload: unknown;
52
52
  traceId?: string;
53
53
  }) => Promise<void>;
@@ -70,7 +70,7 @@ interface HandlerCtx {
70
70
  /** Secret provider for secure credentials */
71
71
  secretProvider?: SecretProvider;
72
72
  /** Internal pipe: filled by executor to enforce declared events */
73
- __emitGuard__?: (key: string, version: number, payload: unknown) => Promise<void>;
73
+ __emitGuard__?: (key: string, version: string, payload: unknown) => Promise<void>;
74
74
  /** Resolved application configuration for the current execution context */
75
75
  appConfig?: ResolvedAppConfig;
76
76
  /** Resolved integration connections available to this execution */
@@ -23,7 +23,7 @@ var PrismaStateStore = class {
23
23
  return {
24
24
  workflowId: record.id,
25
25
  workflowName: record.name,
26
- workflowVersion: parseInt(record.version, 10),
26
+ workflowVersion: record.version,
27
27
  currentStep: record.currentStep,
28
28
  data: record.data,
29
29
  history: record.history,
@@ -51,7 +51,7 @@ var PrismaStateStore = class {
51
51
  return {
52
52
  workflowId: updated.id,
53
53
  workflowName: updated.name,
54
- workflowVersion: parseInt(updated.version, 10),
54
+ workflowVersion: updated.version,
55
55
  currentStep: updated.currentStep,
56
56
  data: updated.data,
57
57
  history: updated.history,
@@ -67,7 +67,7 @@ var PrismaStateStore = class {
67
67
  return (await this.prisma.workflowState.findMany({ where })).map((record) => ({
68
68
  workflowId: record.id,
69
69
  workflowName: record.name,
70
- workflowVersion: parseInt(record.version, 10),
70
+ workflowVersion: record.version,
71
71
  currentStep: record.currentStep,
72
72
  data: record.data,
73
73
  history: record.history,
@@ -53,8 +53,10 @@ interface WorkflowRunnerConfig {
53
53
  declare class WorkflowRunner {
54
54
  private readonly config;
55
55
  constructor(config: WorkflowRunnerConfig);
56
- preFlightCheck(workflowName: string, version?: number, resolvedConfig?: ResolvedAppConfig): Promise<WorkflowPreFlightResult>;
57
- start(workflowName: string, version?: number, initialData?: Record<string, unknown>): Promise<string>;
56
+ preFlightCheck(workflowName: string, version?: string,
57
+ // Update to string
58
+ resolvedConfig?: ResolvedAppConfig): Promise<WorkflowPreFlightResult>;
59
+ start(workflowName: string, version?: string, initialData?: Record<string, unknown>): Promise<string>;
58
60
  executeStep(workflowId: string, input?: unknown): Promise<void>;
59
61
  rollback(workflowId: string): Promise<void>;
60
62
  getState(workflowId: string): Promise<WorkflowState>;
@@ -1,8 +1,8 @@
1
1
  import { OwnerShipMeta } from "../ownership.js";
2
2
  import { CapabilityRef } from "../capabilities/capabilities.js";
3
3
  import "../capabilities/index.js";
4
+ import { SpecContractRegistry } from "../registry.js";
4
5
  import { ExperimentRef } from "../experiments/spec.js";
5
- import { GroupKeyFn, RegistryFilter } from "../registry-utils.js";
6
6
  import { OpRef } from "../features/types.js";
7
7
  import "../features/index.js";
8
8
 
@@ -12,7 +12,7 @@ import "../features/index.js";
12
12
  */
13
13
  interface FormRef {
14
14
  key: string;
15
- version: number;
15
+ version: string;
16
16
  }
17
17
  type StepType = 'human' | 'automation' | 'decision';
18
18
  type WorkflowStatus = 'running' | 'paused' | 'completed' | 'failed' | 'cancelled';
@@ -86,21 +86,8 @@ interface WorkflowSpec {
86
86
  };
87
87
  experiments?: ExperimentRef[];
88
88
  }
89
- declare class WorkflowRegistry {
90
- private readonly items;
91
- register(spec: WorkflowSpec): this;
92
- list(): WorkflowSpec[];
93
- get(name: string, version?: number): WorkflowSpec | undefined;
94
- /** Filter workflows by criteria. */
95
- filter(criteria: RegistryFilter): WorkflowSpec[];
96
- /** List workflows with specific tag. */
97
- listByTag(tag: string): WorkflowSpec[];
98
- /** List workflows by owner. */
99
- listByOwner(owner: string): WorkflowSpec[];
100
- /** Group workflows by key function. */
101
- groupBy(keyFn: GroupKeyFn<WorkflowSpec>): Map<string, WorkflowSpec[]>;
102
- /** Get unique tags from all workflows. */
103
- getUniqueTags(): string[];
89
+ declare class WorkflowRegistry extends SpecContractRegistry<'workflow', WorkflowSpec> {
90
+ constructor(items?: WorkflowSpec[]);
104
91
  }
105
92
  //#endregion
106
93
  export { CompensationStep, CompensationStrategy, FormRef, GuardCondition, GuardConditionKind, RetryPolicy, SLA, Step, StepAction, StepType, Transition, WorkflowDefinition, WorkflowMeta, WorkflowRegistry, WorkflowSpec, WorkflowStatus };
@@ -1,53 +1,9 @@
1
- import { filterBy, getUniqueTags, groupBy, init_registry_utils } from "../registry-utils.js";
1
+ import { SpecContractRegistry } from "../registry.js";
2
2
 
3
3
  //#region src/workflow/spec.ts
4
- init_registry_utils();
5
- function workflowKey(meta) {
6
- return `${meta.key}.v${meta.version}`;
7
- }
8
- var WorkflowRegistry = class {
9
- items = /* @__PURE__ */ new Map();
10
- register(spec) {
11
- const key = workflowKey(spec.meta);
12
- if (this.items.has(key)) throw new Error(`Duplicate workflow ${key}`);
13
- this.items.set(key, spec);
14
- return this;
15
- }
16
- list() {
17
- return [...this.items.values()];
18
- }
19
- get(name, version) {
20
- if (version != null) return this.items.get(`${name}.v${version}`);
21
- let candidate;
22
- let max = -Infinity;
23
- for (const spec of this.items.values()) {
24
- if (spec.meta.key !== name) continue;
25
- if (spec.meta.version > max) {
26
- max = spec.meta.version;
27
- candidate = spec;
28
- }
29
- }
30
- return candidate;
31
- }
32
- /** Filter workflows by criteria. */
33
- filter(criteria) {
34
- return filterBy(this.list(), criteria);
35
- }
36
- /** List workflows with specific tag. */
37
- listByTag(tag) {
38
- return this.list().filter((w) => w.meta.tags?.includes(tag));
39
- }
40
- /** List workflows by owner. */
41
- listByOwner(owner) {
42
- return this.list().filter((w) => w.meta.owners?.includes(owner));
43
- }
44
- /** Group workflows by key function. */
45
- groupBy(keyFn) {
46
- return groupBy(this.list(), keyFn);
47
- }
48
- /** Get unique tags from all workflows. */
49
- getUniqueTags() {
50
- return getUniqueTags(this.list());
4
+ var WorkflowRegistry = class extends SpecContractRegistry {
5
+ constructor(items) {
6
+ super("workflow", items);
51
7
  }
52
8
  };
53
9
 
@@ -13,7 +13,7 @@ interface StepExecution {
13
13
  interface WorkflowState {
14
14
  workflowId: string;
15
15
  workflowName: string;
16
- workflowVersion: number;
16
+ workflowVersion: string;
17
17
  currentStep: string;
18
18
  data: Record<string, unknown>;
19
19
  retryCounts?: Record<string, number>;
@@ -113,7 +113,7 @@ function validateStepActions(steps, options, issues) {
113
113
  const action = step.action;
114
114
  if (!action) continue;
115
115
  if (action.operation && options.operations) {
116
- if (!options.operations.getSpec(action.operation.key, action.operation.version)) issues.push({
116
+ if (!options.operations.get(action.operation.key, action.operation.version)) issues.push({
117
117
  level: "error",
118
118
  message: `Step "${step.id}" references unknown operation ${action.operation.key}.v${action.operation.version}.`
119
119
  });