@contractspec/example.personalization 3.7.22 → 3.7.24
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/.turbo/turbo-build.log +6 -6
- package/CHANGELOG.md +30 -0
- package/dist/browser/index.js +1 -1
- package/dist/browser/workflow-extension.js +1 -1
- package/dist/index.js +1 -1
- package/dist/node/index.js +1 -1
- package/dist/node/workflow-extension.js +1 -1
- package/dist/workflow-extension.js +1 -1
- package/package.json +7 -7
- package/src/workflow-extension.ts +1 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -2,10 +2,10 @@ $ contractspec-bun-build prebuild
|
|
|
2
2
|
$ bun run build:bundle && bun run build:types
|
|
3
3
|
$ contractspec-bun-build transpile
|
|
4
4
|
[contractspec-bun-build] transpile target=bun root=src entries=10 noBundle=false
|
|
5
|
-
Bundled 10 modules in
|
|
5
|
+
Bundled 10 modules in 49ms
|
|
6
6
|
|
|
7
7
|
./behavior-tracking.js 0.95 KB (entry point)
|
|
8
|
-
./index.js 7.
|
|
8
|
+
./index.js 7.53 KB (entry point)
|
|
9
9
|
./personalization.theme.js 0.88 KB (entry point)
|
|
10
10
|
./workflow-extension.js 1.1 KB (entry point)
|
|
11
11
|
docs/index.js 1.29 KB (entry point)
|
|
@@ -16,10 +16,10 @@ Bundled 10 modules in 16ms
|
|
|
16
16
|
./personalization.feature.js 0.56 KB (entry point)
|
|
17
17
|
|
|
18
18
|
[contractspec-bun-build] transpile target=node root=src entries=10 noBundle=false
|
|
19
|
-
Bundled 10 modules in
|
|
19
|
+
Bundled 10 modules in 42ms
|
|
20
20
|
|
|
21
21
|
./behavior-tracking.js 0.94 KB (entry point)
|
|
22
|
-
./index.js 7.
|
|
22
|
+
./index.js 7.52 KB (entry point)
|
|
23
23
|
./personalization.theme.js 0.87 KB (entry point)
|
|
24
24
|
./workflow-extension.js 1.1 KB (entry point)
|
|
25
25
|
docs/index.js 1.28 KB (entry point)
|
|
@@ -30,10 +30,10 @@ Bundled 10 modules in 26ms
|
|
|
30
30
|
./personalization.feature.js 0.56 KB (entry point)
|
|
31
31
|
|
|
32
32
|
[contractspec-bun-build] transpile target=browser root=src entries=10 noBundle=false
|
|
33
|
-
Bundled 10 modules in
|
|
33
|
+
Bundled 10 modules in 37ms
|
|
34
34
|
|
|
35
35
|
./behavior-tracking.js 0.94 KB (entry point)
|
|
36
|
-
./index.js 7.
|
|
36
|
+
./index.js 7.52 KB (entry point)
|
|
37
37
|
./personalization.theme.js 0.87 KB (entry point)
|
|
38
38
|
./workflow-extension.js 1.1 KB (entry point)
|
|
39
39
|
docs/index.js 1.28 KB (entry point)
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,35 @@
|
|
|
1
1
|
# @contractspec/example.personalization
|
|
2
2
|
|
|
3
|
+
## 3.7.24
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- chore: auto-bump internal dependents
|
|
8
|
+
- Updated dependencies because of chore: auto-bump internal dependents
|
|
9
|
+
- Updated dependencies because of Add mobile-safe FormSpec layout helpers and scoped DataView filters.
|
|
10
|
+
|
|
11
|
+
FormSpec authors can now use `responsiveFormColumns(...)` for explicit mobile-first column metadata without changing legacy numeric `layout.columns` behavior. DataView contracts can declare `filterScope.initial` and `filterScope.locked` filters so generic list/search contracts can be reused in context-restricted screens while keeping locked constraints out of user-editable URL state.
|
|
12
|
+
|
|
13
|
+
- Updated dependencies because of Add OSS harness CLI verification with deterministic Playwright, optional agent-browser visual runs, auth profile refs, visual diff evidence, replay bundles, and core scenario success semantics.
|
|
14
|
+
- @contractspec/lib.logger@3.7.17
|
|
15
|
+
- @contractspec/lib.overlay-engine@3.7.24
|
|
16
|
+
- @contractspec/lib.personalization@6.0.24
|
|
17
|
+
- @contractspec/lib.workflow-composer@3.7.24
|
|
18
|
+
- @contractspec/lib.contracts-spec@5.7.0
|
|
19
|
+
|
|
20
|
+
## 3.7.23
|
|
21
|
+
|
|
22
|
+
### Patch Changes
|
|
23
|
+
|
|
24
|
+
- chore: auto-bump internal dependents
|
|
25
|
+
- Updated dependencies because of chore: auto-bump internal dependents
|
|
26
|
+
- Updated dependencies because of Add password-aware FormSpec rendering with current/new password manager hints and visibility toggles.
|
|
27
|
+
- @contractspec/lib.logger@3.7.16
|
|
28
|
+
- @contractspec/lib.overlay-engine@3.7.23
|
|
29
|
+
- @contractspec/lib.personalization@6.0.23
|
|
30
|
+
- @contractspec/lib.workflow-composer@3.7.23
|
|
31
|
+
- @contractspec/lib.contracts-spec@5.6.0
|
|
32
|
+
|
|
3
33
|
## 3.7.22
|
|
4
34
|
|
|
5
35
|
### Patch Changes
|
package/dist/browser/index.js
CHANGED
|
@@ -6,4 +6,4 @@ import{Logger as J,LogLevel as K}from"@contractspec/lib.logger";import{BehaviorA
|
|
|
6
6
|
## Guardrails
|
|
7
7
|
- Keep tracking events structured and non-PII.
|
|
8
8
|
- Keep overlays signed and scoped.
|
|
9
|
-
- Keep workflow composition deterministic.`},{id:"docs.examples.personalization.usage",title:"Personalization — Usage",summary:"How to run the small examples and swap adapters.",kind:"usage",visibility:"public",route:"/docs/examples/personalization/usage",tags:["personalization","usage"],body:"## Usage\n- Call `runBehaviorTrackingExample()` for insights.\n- Call `runOverlayCustomizationExample()` to apply overlays.\n- Call `composeTenantWorkflowExample()` and `logTenantWorkflowSteps()` to inspect steps.\n\n## Notes\n- Replace in-memory stores with app-layer storage.\n- Keep PII out of logs and markdown outputs."}];X(Y);import{defineExample as Z}from"@contractspec/lib.contracts-spec/examples";var _=Z({meta:{key:"examples.personalization",version:"1.0.0",title:"Personalization",description:"Personalization examples: behavior tracking, overlay customization, workflow extension.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","personalization"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.personalization"}}),$=_;import{Logger as A,LogLevel as C}from"@contractspec/lib.logger";import{OverlayEngine as D,OverlayRegistry as F}from"@contractspec/lib.overlay-engine";import{signOverlay as I}from"@contractspec/lib.overlay-engine/signer";import{defineOverlay as M}from"@contractspec/lib.overlay-engine/spec";var R=new A({level:C.INFO,environment:"production",enableColors:!1});async function a(){let x=new F({allowUnsigned:!0}),j=new D({registry:x}),G=M({overlayId:"demo-overlay",version:"1.0.0",appliesTo:{capability:"billing.createOrder",tenantId:"demo"},modifications:[{type:"hideField",field:"internalNotes"},{type:"renameLabel",field:"customerReference",newLabel:"PO Number"}]}),q=await I(G,process.env.PRIVATE_KEY_PEM??"");x.register(q);let H=j.apply({target:{fields:[{key:"customerReference",label:"Customer Reference",visible:!0},{key:"internalNotes",label:"Internal Notes",visible:!0}]},capability:"billing.createOrder",tenantId:"demo"});R.info("Overlay applied",{fields:H.target.fields})}import{OwnersEnum as T,StabilityEnum as f}from"@contractspec/lib.contracts-spec/ownership";var c={meta:{key:"personalization.experiment.overlay-copy",version:"1.0.0",title:"Personalization Overlay Copy Experiment",description:"Tests a control onboarding copy against a personalized overlay variant.",domain:"personalization",owners:[T.PlatformCore],tags:["personalization","experiment","overlay"],stability:f.Experimental},controlVariant:"control",variants:[{id:"control",key:"control",description:"Default onboarding copy and standard workflow."},{id:"personalized-overlay",key:"personalized-overlay",description:"Personalized copy with a branded theme override.",overrides:[{type:"theme",target:"personalization.theme.guided-onboarding",version:"1.0.0"},{type:"workflow",target:"billing.invoiceApproval",version:"1.0.0"}]}],allocation:{type:"sticky",attribute:"userId",salt:"personalization-overlay-copy"},successMetrics:[{key:"checklist-completion-rate",telemetryEvent:{key:"personalization.assignment.completed",version:"1.0.0"},aggregation:"count",target:1}],tags:["personalization","experiment"]};import{defineFeature as P}from"@contractspec/lib.contracts-spec/features";var xx=P({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Behavior tracking, overlay customization, and workflow extension patterns",domain:"personalization",owners:["@examples"],tags:["personalization","behavior","overlay","workflow"],stability:"experimental"},telemetry:[{key:"personalization.telemetry",version:"1.0.0"}],docs:["docs.examples.personalization","docs.examples.personalization.usage"]});import{OwnersEnum as W,StabilityEnum as d}from"@contractspec/lib.contracts-spec/ownership";var Gx={meta:{key:"personalization.theme.guided-onboarding",version:"1.0.0",title:"Guided Onboarding Theme",description:"Theme tokens used when the personalized onboarding experience is active.",domain:"personalization",owners:[W.PlatformCore],tags:["personalization","theme","onboarding"],stability:d.Experimental,scopes:["tenant","user"]},tokens:{colors:{surface:{value:"#FCF6E8"},accent:{value:"#C8742A"},text:{value:"#2F2419"}},radii:{card:{value:18}},space:{panel:{value:24}},typography:{body:{value:16},title:{value:28}},motion:{stagger:{value:"180ms"}}},components:[{component:"OnboardingChecklist",variants:{guided:{props:{emphasis:"warm"}}}}],overrides:[{scope:"tenant",target:"tenant:acme",tokens:{colors:{accent:{value:"#8A4B12"}}}}]};import{StabilityEnum as z}from"@contractspec/lib.contracts-spec";import{Logger as S,LogLevel as m}from"@contractspec/lib.logger";import{WorkflowComposer as B}from"@contractspec/lib.workflow-composer";var h=new S({level:m.INFO,environment:"production",enableColors:!1}),O={meta:{key:"billing.invoiceApproval",version:"1.0.0",title:"Invoice Approval",owners:[],tags:[],description:"",domain:"billing",stability:z.Stable},definition:{steps:[{id:"validate-invoice",type:"automation",label:"Validate Invoice"},{id:"final-approval",type:"human",label:"Final Approval"}],transitions:[{from:"validate-invoice",to:"final-approval"}]}};function Qx(){let x=new B;return x.register({workflow:"billing.invoiceApproval",tenantId:"acme",customSteps:[{after:"validate-invoice",inject:{id:"acme-legal",type:"human",label:"ACME Legal Review"},transitionTo:"final-approval"}]}),x.compose({base:O,tenantId:"acme"})}function Ux(x){h.info("Tenant workflow composed",{workflow:x.meta.key,steps:x.definition.steps.map((j)=>j.id)})}export{a as runOverlayCustomizationExample,v as runBehaviorTrackingExample,Ux as logTenantWorkflowSteps,$ as example,Qx as composeTenantWorkflowExample,Gx as PersonalizationTheme,xx as PersonalizationFeature,c as PersonalizationExperiment,_ as ExamplesPersonalizationExample};
|
|
9
|
+
- Keep workflow composition deterministic.`},{id:"docs.examples.personalization.usage",title:"Personalization — Usage",summary:"How to run the small examples and swap adapters.",kind:"usage",visibility:"public",route:"/docs/examples/personalization/usage",tags:["personalization","usage"],body:"## Usage\n- Call `runBehaviorTrackingExample()` for insights.\n- Call `runOverlayCustomizationExample()` to apply overlays.\n- Call `composeTenantWorkflowExample()` and `logTenantWorkflowSteps()` to inspect steps.\n\n## Notes\n- Replace in-memory stores with app-layer storage.\n- Keep PII out of logs and markdown outputs."}];X(Y);import{defineExample as Z}from"@contractspec/lib.contracts-spec/examples";var _=Z({meta:{key:"examples.personalization",version:"1.0.0",title:"Personalization",description:"Personalization examples: behavior tracking, overlay customization, workflow extension.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","personalization"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.personalization"}}),$=_;import{Logger as A,LogLevel as C}from"@contractspec/lib.logger";import{OverlayEngine as D,OverlayRegistry as F}from"@contractspec/lib.overlay-engine";import{signOverlay as I}from"@contractspec/lib.overlay-engine/signer";import{defineOverlay as M}from"@contractspec/lib.overlay-engine/spec";var R=new A({level:C.INFO,environment:"production",enableColors:!1});async function a(){let x=new F({allowUnsigned:!0}),j=new D({registry:x}),G=M({overlayId:"demo-overlay",version:"1.0.0",appliesTo:{capability:"billing.createOrder",tenantId:"demo"},modifications:[{type:"hideField",field:"internalNotes"},{type:"renameLabel",field:"customerReference",newLabel:"PO Number"}]}),q=await I(G,process.env.PRIVATE_KEY_PEM??"");x.register(q);let H=j.apply({target:{fields:[{key:"customerReference",label:"Customer Reference",visible:!0},{key:"internalNotes",label:"Internal Notes",visible:!0}]},capability:"billing.createOrder",tenantId:"demo"});R.info("Overlay applied",{fields:H.target.fields})}import{OwnersEnum as T,StabilityEnum as f}from"@contractspec/lib.contracts-spec/ownership";var c={meta:{key:"personalization.experiment.overlay-copy",version:"1.0.0",title:"Personalization Overlay Copy Experiment",description:"Tests a control onboarding copy against a personalized overlay variant.",domain:"personalization",owners:[T.PlatformCore],tags:["personalization","experiment","overlay"],stability:f.Experimental},controlVariant:"control",variants:[{id:"control",key:"control",description:"Default onboarding copy and standard workflow."},{id:"personalized-overlay",key:"personalized-overlay",description:"Personalized copy with a branded theme override.",overrides:[{type:"theme",target:"personalization.theme.guided-onboarding",version:"1.0.0"},{type:"workflow",target:"billing.invoiceApproval",version:"1.0.0"}]}],allocation:{type:"sticky",attribute:"userId",salt:"personalization-overlay-copy"},successMetrics:[{key:"checklist-completion-rate",telemetryEvent:{key:"personalization.assignment.completed",version:"1.0.0"},aggregation:"count",target:1}],tags:["personalization","experiment"]};import{defineFeature as P}from"@contractspec/lib.contracts-spec/features";var xx=P({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Behavior tracking, overlay customization, and workflow extension patterns",domain:"personalization",owners:["@examples"],tags:["personalization","behavior","overlay","workflow"],stability:"experimental"},telemetry:[{key:"personalization.telemetry",version:"1.0.0"}],docs:["docs.examples.personalization","docs.examples.personalization.usage"]});import{OwnersEnum as W,StabilityEnum as d}from"@contractspec/lib.contracts-spec/ownership";var Gx={meta:{key:"personalization.theme.guided-onboarding",version:"1.0.0",title:"Guided Onboarding Theme",description:"Theme tokens used when the personalized onboarding experience is active.",domain:"personalization",owners:[W.PlatformCore],tags:["personalization","theme","onboarding"],stability:d.Experimental,scopes:["tenant","user"]},tokens:{colors:{surface:{value:"#FCF6E8"},accent:{value:"#C8742A"},text:{value:"#2F2419"}},radii:{card:{value:18}},space:{panel:{value:24}},typography:{body:{value:16},title:{value:28}},motion:{stagger:{value:"180ms"}}},components:[{component:"OnboardingChecklist",variants:{guided:{props:{emphasis:"warm"}}}}],overrides:[{scope:"tenant",target:"tenant:acme",tokens:{colors:{accent:{value:"#8A4B12"}}}}]};import{StabilityEnum as z}from"@contractspec/lib.contracts-spec/ownership";import{Logger as S,LogLevel as m}from"@contractspec/lib.logger";import{WorkflowComposer as B}from"@contractspec/lib.workflow-composer";var h=new S({level:m.INFO,environment:"production",enableColors:!1}),O={meta:{key:"billing.invoiceApproval",version:"1.0.0",title:"Invoice Approval",owners:[],tags:[],description:"",domain:"billing",stability:z.Stable},definition:{steps:[{id:"validate-invoice",type:"automation",label:"Validate Invoice"},{id:"final-approval",type:"human",label:"Final Approval"}],transitions:[{from:"validate-invoice",to:"final-approval"}]}};function Qx(){let x=new B;return x.register({workflow:"billing.invoiceApproval",tenantId:"acme",customSteps:[{after:"validate-invoice",inject:{id:"acme-legal",type:"human",label:"ACME Legal Review"},transitionTo:"final-approval"}]}),x.compose({base:O,tenantId:"acme"})}function Ux(x){h.info("Tenant workflow composed",{workflow:x.meta.key,steps:x.definition.steps.map((j)=>j.id)})}export{a as runOverlayCustomizationExample,v as runBehaviorTrackingExample,Ux as logTenantWorkflowSteps,$ as example,Qx as composeTenantWorkflowExample,Gx as PersonalizationTheme,xx as PersonalizationFeature,c as PersonalizationExperiment,_ as ExamplesPersonalizationExample};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{StabilityEnum as j}from"@contractspec/lib.contracts-spec";import{Logger as q,LogLevel as x}from"@contractspec/lib.logger";import{WorkflowComposer as z}from"@contractspec/lib.workflow-composer";var A=new q({level:x.INFO,environment:"production",enableColors:!1}),D={meta:{key:"billing.invoiceApproval",version:"1.0.0",title:"Invoice Approval",owners:[],tags:[],description:"",domain:"billing",stability:j.Stable},definition:{steps:[{id:"validate-invoice",type:"automation",label:"Validate Invoice"},{id:"final-approval",type:"human",label:"Final Approval"}],transitions:[{from:"validate-invoice",to:"final-approval"}]}};function I(){let d=new z;return d.register({workflow:"billing.invoiceApproval",tenantId:"acme",customSteps:[{after:"validate-invoice",inject:{id:"acme-legal",type:"human",label:"ACME Legal Review"},transitionTo:"final-approval"}]}),d.compose({base:D,tenantId:"acme"})}function J(d){A.info("Tenant workflow composed",{workflow:d.meta.key,steps:d.definition.steps.map((h)=>h.id)})}export{J as logTenantWorkflowSteps,I as composeTenantWorkflowExample};
|
|
1
|
+
import{StabilityEnum as j}from"@contractspec/lib.contracts-spec/ownership";import{Logger as q,LogLevel as x}from"@contractspec/lib.logger";import{WorkflowComposer as z}from"@contractspec/lib.workflow-composer";var A=new q({level:x.INFO,environment:"production",enableColors:!1}),D={meta:{key:"billing.invoiceApproval",version:"1.0.0",title:"Invoice Approval",owners:[],tags:[],description:"",domain:"billing",stability:j.Stable},definition:{steps:[{id:"validate-invoice",type:"automation",label:"Validate Invoice"},{id:"final-approval",type:"human",label:"Final Approval"}],transitions:[{from:"validate-invoice",to:"final-approval"}]}};function I(){let d=new z;return d.register({workflow:"billing.invoiceApproval",tenantId:"acme",customSteps:[{after:"validate-invoice",inject:{id:"acme-legal",type:"human",label:"ACME Legal Review"},transitionTo:"final-approval"}]}),d.compose({base:D,tenantId:"acme"})}function J(d){A.info("Tenant workflow composed",{workflow:d.meta.key,steps:d.definition.steps.map((h)=>h.id)})}export{J as logTenantWorkflowSteps,I as composeTenantWorkflowExample};
|
package/dist/index.js
CHANGED
|
@@ -7,4 +7,4 @@ import{Logger as J,LogLevel as K}from"@contractspec/lib.logger";import{BehaviorA
|
|
|
7
7
|
## Guardrails
|
|
8
8
|
- Keep tracking events structured and non-PII.
|
|
9
9
|
- Keep overlays signed and scoped.
|
|
10
|
-
- Keep workflow composition deterministic.`},{id:"docs.examples.personalization.usage",title:"Personalization \u2014 Usage",summary:"How to run the small examples and swap adapters.",kind:"usage",visibility:"public",route:"/docs/examples/personalization/usage",tags:["personalization","usage"],body:"## Usage\n- Call `runBehaviorTrackingExample()` for insights.\n- Call `runOverlayCustomizationExample()` to apply overlays.\n- Call `composeTenantWorkflowExample()` and `logTenantWorkflowSteps()` to inspect steps.\n\n## Notes\n- Replace in-memory stores with app-layer storage.\n- Keep PII out of logs and markdown outputs."}];X(Y);import{defineExample as Z}from"@contractspec/lib.contracts-spec/examples";var _=Z({meta:{key:"examples.personalization",version:"1.0.0",title:"Personalization",description:"Personalization examples: behavior tracking, overlay customization, workflow extension.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","personalization"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.personalization"}}),$=_;import{Logger as A,LogLevel as C}from"@contractspec/lib.logger";import{OverlayEngine as D,OverlayRegistry as F}from"@contractspec/lib.overlay-engine";import{signOverlay as I}from"@contractspec/lib.overlay-engine/signer";import{defineOverlay as M}from"@contractspec/lib.overlay-engine/spec";var R=new A({level:C.INFO,environment:"production",enableColors:!1});async function a(){let x=new F({allowUnsigned:!0}),j=new D({registry:x}),G=M({overlayId:"demo-overlay",version:"1.0.0",appliesTo:{capability:"billing.createOrder",tenantId:"demo"},modifications:[{type:"hideField",field:"internalNotes"},{type:"renameLabel",field:"customerReference",newLabel:"PO Number"}]}),q=await I(G,process.env.PRIVATE_KEY_PEM??"");x.register(q);let H=j.apply({target:{fields:[{key:"customerReference",label:"Customer Reference",visible:!0},{key:"internalNotes",label:"Internal Notes",visible:!0}]},capability:"billing.createOrder",tenantId:"demo"});R.info("Overlay applied",{fields:H.target.fields})}import{OwnersEnum as T,StabilityEnum as f}from"@contractspec/lib.contracts-spec/ownership";var c={meta:{key:"personalization.experiment.overlay-copy",version:"1.0.0",title:"Personalization Overlay Copy Experiment",description:"Tests a control onboarding copy against a personalized overlay variant.",domain:"personalization",owners:[T.PlatformCore],tags:["personalization","experiment","overlay"],stability:f.Experimental},controlVariant:"control",variants:[{id:"control",key:"control",description:"Default onboarding copy and standard workflow."},{id:"personalized-overlay",key:"personalized-overlay",description:"Personalized copy with a branded theme override.",overrides:[{type:"theme",target:"personalization.theme.guided-onboarding",version:"1.0.0"},{type:"workflow",target:"billing.invoiceApproval",version:"1.0.0"}]}],allocation:{type:"sticky",attribute:"userId",salt:"personalization-overlay-copy"},successMetrics:[{key:"checklist-completion-rate",telemetryEvent:{key:"personalization.assignment.completed",version:"1.0.0"},aggregation:"count",target:1}],tags:["personalization","experiment"]};import{defineFeature as P}from"@contractspec/lib.contracts-spec/features";var xx=P({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Behavior tracking, overlay customization, and workflow extension patterns",domain:"personalization",owners:["@examples"],tags:["personalization","behavior","overlay","workflow"],stability:"experimental"},telemetry:[{key:"personalization.telemetry",version:"1.0.0"}],docs:["docs.examples.personalization","docs.examples.personalization.usage"]});import{OwnersEnum as W,StabilityEnum as d}from"@contractspec/lib.contracts-spec/ownership";var Gx={meta:{key:"personalization.theme.guided-onboarding",version:"1.0.0",title:"Guided Onboarding Theme",description:"Theme tokens used when the personalized onboarding experience is active.",domain:"personalization",owners:[W.PlatformCore],tags:["personalization","theme","onboarding"],stability:d.Experimental,scopes:["tenant","user"]},tokens:{colors:{surface:{value:"#FCF6E8"},accent:{value:"#C8742A"},text:{value:"#2F2419"}},radii:{card:{value:18}},space:{panel:{value:24}},typography:{body:{value:16},title:{value:28}},motion:{stagger:{value:"180ms"}}},components:[{component:"OnboardingChecklist",variants:{guided:{props:{emphasis:"warm"}}}}],overrides:[{scope:"tenant",target:"tenant:acme",tokens:{colors:{accent:{value:"#8A4B12"}}}}]};import{StabilityEnum as z}from"@contractspec/lib.contracts-spec";import{Logger as S,LogLevel as m}from"@contractspec/lib.logger";import{WorkflowComposer as B}from"@contractspec/lib.workflow-composer";var h=new S({level:m.INFO,environment:"production",enableColors:!1}),O={meta:{key:"billing.invoiceApproval",version:"1.0.0",title:"Invoice Approval",owners:[],tags:[],description:"",domain:"billing",stability:z.Stable},definition:{steps:[{id:"validate-invoice",type:"automation",label:"Validate Invoice"},{id:"final-approval",type:"human",label:"Final Approval"}],transitions:[{from:"validate-invoice",to:"final-approval"}]}};function Qx(){let x=new B;return x.register({workflow:"billing.invoiceApproval",tenantId:"acme",customSteps:[{after:"validate-invoice",inject:{id:"acme-legal",type:"human",label:"ACME Legal Review"},transitionTo:"final-approval"}]}),x.compose({base:O,tenantId:"acme"})}function Ux(x){h.info("Tenant workflow composed",{workflow:x.meta.key,steps:x.definition.steps.map((j)=>j.id)})}export{a as runOverlayCustomizationExample,v as runBehaviorTrackingExample,Ux as logTenantWorkflowSteps,$ as example,Qx as composeTenantWorkflowExample,Gx as PersonalizationTheme,xx as PersonalizationFeature,c as PersonalizationExperiment,_ as ExamplesPersonalizationExample};
|
|
10
|
+
- Keep workflow composition deterministic.`},{id:"docs.examples.personalization.usage",title:"Personalization \u2014 Usage",summary:"How to run the small examples and swap adapters.",kind:"usage",visibility:"public",route:"/docs/examples/personalization/usage",tags:["personalization","usage"],body:"## Usage\n- Call `runBehaviorTrackingExample()` for insights.\n- Call `runOverlayCustomizationExample()` to apply overlays.\n- Call `composeTenantWorkflowExample()` and `logTenantWorkflowSteps()` to inspect steps.\n\n## Notes\n- Replace in-memory stores with app-layer storage.\n- Keep PII out of logs and markdown outputs."}];X(Y);import{defineExample as Z}from"@contractspec/lib.contracts-spec/examples";var _=Z({meta:{key:"examples.personalization",version:"1.0.0",title:"Personalization",description:"Personalization examples: behavior tracking, overlay customization, workflow extension.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","personalization"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.personalization"}}),$=_;import{Logger as A,LogLevel as C}from"@contractspec/lib.logger";import{OverlayEngine as D,OverlayRegistry as F}from"@contractspec/lib.overlay-engine";import{signOverlay as I}from"@contractspec/lib.overlay-engine/signer";import{defineOverlay as M}from"@contractspec/lib.overlay-engine/spec";var R=new A({level:C.INFO,environment:"production",enableColors:!1});async function a(){let x=new F({allowUnsigned:!0}),j=new D({registry:x}),G=M({overlayId:"demo-overlay",version:"1.0.0",appliesTo:{capability:"billing.createOrder",tenantId:"demo"},modifications:[{type:"hideField",field:"internalNotes"},{type:"renameLabel",field:"customerReference",newLabel:"PO Number"}]}),q=await I(G,process.env.PRIVATE_KEY_PEM??"");x.register(q);let H=j.apply({target:{fields:[{key:"customerReference",label:"Customer Reference",visible:!0},{key:"internalNotes",label:"Internal Notes",visible:!0}]},capability:"billing.createOrder",tenantId:"demo"});R.info("Overlay applied",{fields:H.target.fields})}import{OwnersEnum as T,StabilityEnum as f}from"@contractspec/lib.contracts-spec/ownership";var c={meta:{key:"personalization.experiment.overlay-copy",version:"1.0.0",title:"Personalization Overlay Copy Experiment",description:"Tests a control onboarding copy against a personalized overlay variant.",domain:"personalization",owners:[T.PlatformCore],tags:["personalization","experiment","overlay"],stability:f.Experimental},controlVariant:"control",variants:[{id:"control",key:"control",description:"Default onboarding copy and standard workflow."},{id:"personalized-overlay",key:"personalized-overlay",description:"Personalized copy with a branded theme override.",overrides:[{type:"theme",target:"personalization.theme.guided-onboarding",version:"1.0.0"},{type:"workflow",target:"billing.invoiceApproval",version:"1.0.0"}]}],allocation:{type:"sticky",attribute:"userId",salt:"personalization-overlay-copy"},successMetrics:[{key:"checklist-completion-rate",telemetryEvent:{key:"personalization.assignment.completed",version:"1.0.0"},aggregation:"count",target:1}],tags:["personalization","experiment"]};import{defineFeature as P}from"@contractspec/lib.contracts-spec/features";var xx=P({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Behavior tracking, overlay customization, and workflow extension patterns",domain:"personalization",owners:["@examples"],tags:["personalization","behavior","overlay","workflow"],stability:"experimental"},telemetry:[{key:"personalization.telemetry",version:"1.0.0"}],docs:["docs.examples.personalization","docs.examples.personalization.usage"]});import{OwnersEnum as W,StabilityEnum as d}from"@contractspec/lib.contracts-spec/ownership";var Gx={meta:{key:"personalization.theme.guided-onboarding",version:"1.0.0",title:"Guided Onboarding Theme",description:"Theme tokens used when the personalized onboarding experience is active.",domain:"personalization",owners:[W.PlatformCore],tags:["personalization","theme","onboarding"],stability:d.Experimental,scopes:["tenant","user"]},tokens:{colors:{surface:{value:"#FCF6E8"},accent:{value:"#C8742A"},text:{value:"#2F2419"}},radii:{card:{value:18}},space:{panel:{value:24}},typography:{body:{value:16},title:{value:28}},motion:{stagger:{value:"180ms"}}},components:[{component:"OnboardingChecklist",variants:{guided:{props:{emphasis:"warm"}}}}],overrides:[{scope:"tenant",target:"tenant:acme",tokens:{colors:{accent:{value:"#8A4B12"}}}}]};import{StabilityEnum as z}from"@contractspec/lib.contracts-spec/ownership";import{Logger as S,LogLevel as m}from"@contractspec/lib.logger";import{WorkflowComposer as B}from"@contractspec/lib.workflow-composer";var h=new S({level:m.INFO,environment:"production",enableColors:!1}),O={meta:{key:"billing.invoiceApproval",version:"1.0.0",title:"Invoice Approval",owners:[],tags:[],description:"",domain:"billing",stability:z.Stable},definition:{steps:[{id:"validate-invoice",type:"automation",label:"Validate Invoice"},{id:"final-approval",type:"human",label:"Final Approval"}],transitions:[{from:"validate-invoice",to:"final-approval"}]}};function Qx(){let x=new B;return x.register({workflow:"billing.invoiceApproval",tenantId:"acme",customSteps:[{after:"validate-invoice",inject:{id:"acme-legal",type:"human",label:"ACME Legal Review"},transitionTo:"final-approval"}]}),x.compose({base:O,tenantId:"acme"})}function Ux(x){h.info("Tenant workflow composed",{workflow:x.meta.key,steps:x.definition.steps.map((j)=>j.id)})}export{a as runOverlayCustomizationExample,v as runBehaviorTrackingExample,Ux as logTenantWorkflowSteps,$ as example,Qx as composeTenantWorkflowExample,Gx as PersonalizationTheme,xx as PersonalizationFeature,c as PersonalizationExperiment,_ as ExamplesPersonalizationExample};
|
package/dist/node/index.js
CHANGED
|
@@ -6,4 +6,4 @@ import{Logger as J,LogLevel as K}from"@contractspec/lib.logger";import{BehaviorA
|
|
|
6
6
|
## Guardrails
|
|
7
7
|
- Keep tracking events structured and non-PII.
|
|
8
8
|
- Keep overlays signed and scoped.
|
|
9
|
-
- Keep workflow composition deterministic.`},{id:"docs.examples.personalization.usage",title:"Personalization — Usage",summary:"How to run the small examples and swap adapters.",kind:"usage",visibility:"public",route:"/docs/examples/personalization/usage",tags:["personalization","usage"],body:"## Usage\n- Call `runBehaviorTrackingExample()` for insights.\n- Call `runOverlayCustomizationExample()` to apply overlays.\n- Call `composeTenantWorkflowExample()` and `logTenantWorkflowSteps()` to inspect steps.\n\n## Notes\n- Replace in-memory stores with app-layer storage.\n- Keep PII out of logs and markdown outputs."}];X(Y);import{defineExample as Z}from"@contractspec/lib.contracts-spec/examples";var _=Z({meta:{key:"examples.personalization",version:"1.0.0",title:"Personalization",description:"Personalization examples: behavior tracking, overlay customization, workflow extension.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","personalization"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.personalization"}}),$=_;import{Logger as A,LogLevel as C}from"@contractspec/lib.logger";import{OverlayEngine as D,OverlayRegistry as F}from"@contractspec/lib.overlay-engine";import{signOverlay as I}from"@contractspec/lib.overlay-engine/signer";import{defineOverlay as M}from"@contractspec/lib.overlay-engine/spec";var R=new A({level:C.INFO,environment:"production",enableColors:!1});async function a(){let x=new F({allowUnsigned:!0}),j=new D({registry:x}),G=M({overlayId:"demo-overlay",version:"1.0.0",appliesTo:{capability:"billing.createOrder",tenantId:"demo"},modifications:[{type:"hideField",field:"internalNotes"},{type:"renameLabel",field:"customerReference",newLabel:"PO Number"}]}),q=await I(G,process.env.PRIVATE_KEY_PEM??"");x.register(q);let H=j.apply({target:{fields:[{key:"customerReference",label:"Customer Reference",visible:!0},{key:"internalNotes",label:"Internal Notes",visible:!0}]},capability:"billing.createOrder",tenantId:"demo"});R.info("Overlay applied",{fields:H.target.fields})}import{OwnersEnum as T,StabilityEnum as f}from"@contractspec/lib.contracts-spec/ownership";var c={meta:{key:"personalization.experiment.overlay-copy",version:"1.0.0",title:"Personalization Overlay Copy Experiment",description:"Tests a control onboarding copy against a personalized overlay variant.",domain:"personalization",owners:[T.PlatformCore],tags:["personalization","experiment","overlay"],stability:f.Experimental},controlVariant:"control",variants:[{id:"control",key:"control",description:"Default onboarding copy and standard workflow."},{id:"personalized-overlay",key:"personalized-overlay",description:"Personalized copy with a branded theme override.",overrides:[{type:"theme",target:"personalization.theme.guided-onboarding",version:"1.0.0"},{type:"workflow",target:"billing.invoiceApproval",version:"1.0.0"}]}],allocation:{type:"sticky",attribute:"userId",salt:"personalization-overlay-copy"},successMetrics:[{key:"checklist-completion-rate",telemetryEvent:{key:"personalization.assignment.completed",version:"1.0.0"},aggregation:"count",target:1}],tags:["personalization","experiment"]};import{defineFeature as P}from"@contractspec/lib.contracts-spec/features";var xx=P({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Behavior tracking, overlay customization, and workflow extension patterns",domain:"personalization",owners:["@examples"],tags:["personalization","behavior","overlay","workflow"],stability:"experimental"},telemetry:[{key:"personalization.telemetry",version:"1.0.0"}],docs:["docs.examples.personalization","docs.examples.personalization.usage"]});import{OwnersEnum as W,StabilityEnum as d}from"@contractspec/lib.contracts-spec/ownership";var Gx={meta:{key:"personalization.theme.guided-onboarding",version:"1.0.0",title:"Guided Onboarding Theme",description:"Theme tokens used when the personalized onboarding experience is active.",domain:"personalization",owners:[W.PlatformCore],tags:["personalization","theme","onboarding"],stability:d.Experimental,scopes:["tenant","user"]},tokens:{colors:{surface:{value:"#FCF6E8"},accent:{value:"#C8742A"},text:{value:"#2F2419"}},radii:{card:{value:18}},space:{panel:{value:24}},typography:{body:{value:16},title:{value:28}},motion:{stagger:{value:"180ms"}}},components:[{component:"OnboardingChecklist",variants:{guided:{props:{emphasis:"warm"}}}}],overrides:[{scope:"tenant",target:"tenant:acme",tokens:{colors:{accent:{value:"#8A4B12"}}}}]};import{StabilityEnum as z}from"@contractspec/lib.contracts-spec";import{Logger as S,LogLevel as m}from"@contractspec/lib.logger";import{WorkflowComposer as B}from"@contractspec/lib.workflow-composer";var h=new S({level:m.INFO,environment:"production",enableColors:!1}),O={meta:{key:"billing.invoiceApproval",version:"1.0.0",title:"Invoice Approval",owners:[],tags:[],description:"",domain:"billing",stability:z.Stable},definition:{steps:[{id:"validate-invoice",type:"automation",label:"Validate Invoice"},{id:"final-approval",type:"human",label:"Final Approval"}],transitions:[{from:"validate-invoice",to:"final-approval"}]}};function Qx(){let x=new B;return x.register({workflow:"billing.invoiceApproval",tenantId:"acme",customSteps:[{after:"validate-invoice",inject:{id:"acme-legal",type:"human",label:"ACME Legal Review"},transitionTo:"final-approval"}]}),x.compose({base:O,tenantId:"acme"})}function Ux(x){h.info("Tenant workflow composed",{workflow:x.meta.key,steps:x.definition.steps.map((j)=>j.id)})}export{a as runOverlayCustomizationExample,v as runBehaviorTrackingExample,Ux as logTenantWorkflowSteps,$ as example,Qx as composeTenantWorkflowExample,Gx as PersonalizationTheme,xx as PersonalizationFeature,c as PersonalizationExperiment,_ as ExamplesPersonalizationExample};
|
|
9
|
+
- Keep workflow composition deterministic.`},{id:"docs.examples.personalization.usage",title:"Personalization — Usage",summary:"How to run the small examples and swap adapters.",kind:"usage",visibility:"public",route:"/docs/examples/personalization/usage",tags:["personalization","usage"],body:"## Usage\n- Call `runBehaviorTrackingExample()` for insights.\n- Call `runOverlayCustomizationExample()` to apply overlays.\n- Call `composeTenantWorkflowExample()` and `logTenantWorkflowSteps()` to inspect steps.\n\n## Notes\n- Replace in-memory stores with app-layer storage.\n- Keep PII out of logs and markdown outputs."}];X(Y);import{defineExample as Z}from"@contractspec/lib.contracts-spec/examples";var _=Z({meta:{key:"examples.personalization",version:"1.0.0",title:"Personalization",description:"Personalization examples: behavior tracking, overlay customization, workflow extension.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","personalization"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.personalization"}}),$=_;import{Logger as A,LogLevel as C}from"@contractspec/lib.logger";import{OverlayEngine as D,OverlayRegistry as F}from"@contractspec/lib.overlay-engine";import{signOverlay as I}from"@contractspec/lib.overlay-engine/signer";import{defineOverlay as M}from"@contractspec/lib.overlay-engine/spec";var R=new A({level:C.INFO,environment:"production",enableColors:!1});async function a(){let x=new F({allowUnsigned:!0}),j=new D({registry:x}),G=M({overlayId:"demo-overlay",version:"1.0.0",appliesTo:{capability:"billing.createOrder",tenantId:"demo"},modifications:[{type:"hideField",field:"internalNotes"},{type:"renameLabel",field:"customerReference",newLabel:"PO Number"}]}),q=await I(G,process.env.PRIVATE_KEY_PEM??"");x.register(q);let H=j.apply({target:{fields:[{key:"customerReference",label:"Customer Reference",visible:!0},{key:"internalNotes",label:"Internal Notes",visible:!0}]},capability:"billing.createOrder",tenantId:"demo"});R.info("Overlay applied",{fields:H.target.fields})}import{OwnersEnum as T,StabilityEnum as f}from"@contractspec/lib.contracts-spec/ownership";var c={meta:{key:"personalization.experiment.overlay-copy",version:"1.0.0",title:"Personalization Overlay Copy Experiment",description:"Tests a control onboarding copy against a personalized overlay variant.",domain:"personalization",owners:[T.PlatformCore],tags:["personalization","experiment","overlay"],stability:f.Experimental},controlVariant:"control",variants:[{id:"control",key:"control",description:"Default onboarding copy and standard workflow."},{id:"personalized-overlay",key:"personalized-overlay",description:"Personalized copy with a branded theme override.",overrides:[{type:"theme",target:"personalization.theme.guided-onboarding",version:"1.0.0"},{type:"workflow",target:"billing.invoiceApproval",version:"1.0.0"}]}],allocation:{type:"sticky",attribute:"userId",salt:"personalization-overlay-copy"},successMetrics:[{key:"checklist-completion-rate",telemetryEvent:{key:"personalization.assignment.completed",version:"1.0.0"},aggregation:"count",target:1}],tags:["personalization","experiment"]};import{defineFeature as P}from"@contractspec/lib.contracts-spec/features";var xx=P({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Behavior tracking, overlay customization, and workflow extension patterns",domain:"personalization",owners:["@examples"],tags:["personalization","behavior","overlay","workflow"],stability:"experimental"},telemetry:[{key:"personalization.telemetry",version:"1.0.0"}],docs:["docs.examples.personalization","docs.examples.personalization.usage"]});import{OwnersEnum as W,StabilityEnum as d}from"@contractspec/lib.contracts-spec/ownership";var Gx={meta:{key:"personalization.theme.guided-onboarding",version:"1.0.0",title:"Guided Onboarding Theme",description:"Theme tokens used when the personalized onboarding experience is active.",domain:"personalization",owners:[W.PlatformCore],tags:["personalization","theme","onboarding"],stability:d.Experimental,scopes:["tenant","user"]},tokens:{colors:{surface:{value:"#FCF6E8"},accent:{value:"#C8742A"},text:{value:"#2F2419"}},radii:{card:{value:18}},space:{panel:{value:24}},typography:{body:{value:16},title:{value:28}},motion:{stagger:{value:"180ms"}}},components:[{component:"OnboardingChecklist",variants:{guided:{props:{emphasis:"warm"}}}}],overrides:[{scope:"tenant",target:"tenant:acme",tokens:{colors:{accent:{value:"#8A4B12"}}}}]};import{StabilityEnum as z}from"@contractspec/lib.contracts-spec/ownership";import{Logger as S,LogLevel as m}from"@contractspec/lib.logger";import{WorkflowComposer as B}from"@contractspec/lib.workflow-composer";var h=new S({level:m.INFO,environment:"production",enableColors:!1}),O={meta:{key:"billing.invoiceApproval",version:"1.0.0",title:"Invoice Approval",owners:[],tags:[],description:"",domain:"billing",stability:z.Stable},definition:{steps:[{id:"validate-invoice",type:"automation",label:"Validate Invoice"},{id:"final-approval",type:"human",label:"Final Approval"}],transitions:[{from:"validate-invoice",to:"final-approval"}]}};function Qx(){let x=new B;return x.register({workflow:"billing.invoiceApproval",tenantId:"acme",customSteps:[{after:"validate-invoice",inject:{id:"acme-legal",type:"human",label:"ACME Legal Review"},transitionTo:"final-approval"}]}),x.compose({base:O,tenantId:"acme"})}function Ux(x){h.info("Tenant workflow composed",{workflow:x.meta.key,steps:x.definition.steps.map((j)=>j.id)})}export{a as runOverlayCustomizationExample,v as runBehaviorTrackingExample,Ux as logTenantWorkflowSteps,$ as example,Qx as composeTenantWorkflowExample,Gx as PersonalizationTheme,xx as PersonalizationFeature,c as PersonalizationExperiment,_ as ExamplesPersonalizationExample};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{StabilityEnum as j}from"@contractspec/lib.contracts-spec";import{Logger as q,LogLevel as x}from"@contractspec/lib.logger";import{WorkflowComposer as z}from"@contractspec/lib.workflow-composer";var A=new q({level:x.INFO,environment:"production",enableColors:!1}),D={meta:{key:"billing.invoiceApproval",version:"1.0.0",title:"Invoice Approval",owners:[],tags:[],description:"",domain:"billing",stability:j.Stable},definition:{steps:[{id:"validate-invoice",type:"automation",label:"Validate Invoice"},{id:"final-approval",type:"human",label:"Final Approval"}],transitions:[{from:"validate-invoice",to:"final-approval"}]}};function I(){let d=new z;return d.register({workflow:"billing.invoiceApproval",tenantId:"acme",customSteps:[{after:"validate-invoice",inject:{id:"acme-legal",type:"human",label:"ACME Legal Review"},transitionTo:"final-approval"}]}),d.compose({base:D,tenantId:"acme"})}function J(d){A.info("Tenant workflow composed",{workflow:d.meta.key,steps:d.definition.steps.map((h)=>h.id)})}export{J as logTenantWorkflowSteps,I as composeTenantWorkflowExample};
|
|
1
|
+
import{StabilityEnum as j}from"@contractspec/lib.contracts-spec/ownership";import{Logger as q,LogLevel as x}from"@contractspec/lib.logger";import{WorkflowComposer as z}from"@contractspec/lib.workflow-composer";var A=new q({level:x.INFO,environment:"production",enableColors:!1}),D={meta:{key:"billing.invoiceApproval",version:"1.0.0",title:"Invoice Approval",owners:[],tags:[],description:"",domain:"billing",stability:j.Stable},definition:{steps:[{id:"validate-invoice",type:"automation",label:"Validate Invoice"},{id:"final-approval",type:"human",label:"Final Approval"}],transitions:[{from:"validate-invoice",to:"final-approval"}]}};function I(){let d=new z;return d.register({workflow:"billing.invoiceApproval",tenantId:"acme",customSteps:[{after:"validate-invoice",inject:{id:"acme-legal",type:"human",label:"ACME Legal Review"},transitionTo:"final-approval"}]}),d.compose({base:D,tenantId:"acme"})}function J(d){A.info("Tenant workflow composed",{workflow:d.meta.key,steps:d.definition.steps.map((h)=>h.id)})}export{J as logTenantWorkflowSteps,I as composeTenantWorkflowExample};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{StabilityEnum as j}from"@contractspec/lib.contracts-spec";import{Logger as q,LogLevel as x}from"@contractspec/lib.logger";import{WorkflowComposer as z}from"@contractspec/lib.workflow-composer";var A=new q({level:x.INFO,environment:"production",enableColors:!1}),D={meta:{key:"billing.invoiceApproval",version:"1.0.0",title:"Invoice Approval",owners:[],tags:[],description:"",domain:"billing",stability:j.Stable},definition:{steps:[{id:"validate-invoice",type:"automation",label:"Validate Invoice"},{id:"final-approval",type:"human",label:"Final Approval"}],transitions:[{from:"validate-invoice",to:"final-approval"}]}};function I(){let d=new z;return d.register({workflow:"billing.invoiceApproval",tenantId:"acme",customSteps:[{after:"validate-invoice",inject:{id:"acme-legal",type:"human",label:"ACME Legal Review"},transitionTo:"final-approval"}]}),d.compose({base:D,tenantId:"acme"})}function J(d){A.info("Tenant workflow composed",{workflow:d.meta.key,steps:d.definition.steps.map((h)=>h.id)})}export{J as logTenantWorkflowSteps,I as composeTenantWorkflowExample};
|
|
2
|
+
import{StabilityEnum as j}from"@contractspec/lib.contracts-spec/ownership";import{Logger as q,LogLevel as x}from"@contractspec/lib.logger";import{WorkflowComposer as z}from"@contractspec/lib.workflow-composer";var A=new q({level:x.INFO,environment:"production",enableColors:!1}),D={meta:{key:"billing.invoiceApproval",version:"1.0.0",title:"Invoice Approval",owners:[],tags:[],description:"",domain:"billing",stability:j.Stable},definition:{steps:[{id:"validate-invoice",type:"automation",label:"Validate Invoice"},{id:"final-approval",type:"human",label:"Final Approval"}],transitions:[{from:"validate-invoice",to:"final-approval"}]}};function I(){let d=new z;return d.register({workflow:"billing.invoiceApproval",tenantId:"acme",customSteps:[{after:"validate-invoice",inject:{id:"acme-legal",type:"human",label:"ACME Legal Review"},transitionTo:"final-approval"}]}),d.compose({base:D,tenantId:"acme"})}function J(d){A.info("Tenant workflow composed",{workflow:d.meta.key,steps:d.definition.steps.map((h)=>h.id)})}export{J as logTenantWorkflowSteps,I as composeTenantWorkflowExample};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contractspec/example.personalization",
|
|
3
|
-
"version": "3.7.
|
|
3
|
+
"version": "3.7.24",
|
|
4
4
|
"description": "Personalization examples: behavior tracking, overlay customization, workflow extension.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -92,16 +92,16 @@
|
|
|
92
92
|
"typecheck": "tsc --noEmit"
|
|
93
93
|
},
|
|
94
94
|
"dependencies": {
|
|
95
|
-
"@contractspec/lib.personalization": "6.0.
|
|
96
|
-
"@contractspec/lib.overlay-engine": "3.7.
|
|
97
|
-
"@contractspec/lib.workflow-composer": "3.7.
|
|
98
|
-
"@contractspec/lib.contracts-spec": "5.
|
|
99
|
-
"@contractspec/lib.logger": "3.7.
|
|
95
|
+
"@contractspec/lib.personalization": "6.0.24",
|
|
96
|
+
"@contractspec/lib.overlay-engine": "3.7.24",
|
|
97
|
+
"@contractspec/lib.workflow-composer": "3.7.24",
|
|
98
|
+
"@contractspec/lib.contracts-spec": "5.7.0",
|
|
99
|
+
"@contractspec/lib.logger": "3.7.17"
|
|
100
100
|
},
|
|
101
101
|
"devDependencies": {
|
|
102
102
|
"@contractspec/tool.typescript": "3.7.13",
|
|
103
103
|
"typescript": "^5.9.3",
|
|
104
|
-
"@contractspec/tool.bun": "3.7.
|
|
104
|
+
"@contractspec/tool.bun": "3.7.18"
|
|
105
105
|
},
|
|
106
106
|
"publishConfig": {
|
|
107
107
|
"access": "public",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { StabilityEnum } from '@contractspec/lib.contracts-spec';
|
|
1
|
+
import { StabilityEnum } from '@contractspec/lib.contracts-spec/ownership';
|
|
2
2
|
import type { WorkflowSpec } from '@contractspec/lib.contracts-spec/workflow/spec';
|
|
3
3
|
import { Logger, LogLevel } from '@contractspec/lib.logger';
|
|
4
4
|
import { WorkflowComposer } from '@contractspec/lib.workflow-composer';
|