@contractspec/example.learning-journey-platform-tour 3.7.17 → 3.7.18
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 +33 -33
- package/CHANGELOG.md +12 -0
- package/dist/browser/docs/index.js +1 -37
- package/dist/browser/docs/platform-tour.docblock.js +1 -37
- package/dist/browser/example.js +1 -34
- package/dist/browser/handlers/demo.handlers.js +1 -130
- package/dist/browser/index.js +1 -416
- package/dist/browser/learning-journey-platform-tour.feature.js +1 -48
- package/dist/browser/operations/index.js +1 -221
- package/dist/browser/presentations/index.js +1 -268
- package/dist/browser/tests/operations.test-spec.js +1 -34
- package/dist/browser/track.js +1 -107
- package/dist/docs/index.js +1 -37
- package/dist/docs/platform-tour.docblock.js +1 -37
- package/dist/example.js +1 -34
- package/dist/handlers/demo.handlers.js +1 -130
- package/dist/index.js +1 -416
- package/dist/learning-journey-platform-tour.feature.js +1 -48
- package/dist/node/docs/index.js +1 -37
- package/dist/node/docs/platform-tour.docblock.js +1 -37
- package/dist/node/example.js +1 -34
- package/dist/node/handlers/demo.handlers.js +1 -130
- package/dist/node/index.js +1 -416
- package/dist/node/learning-journey-platform-tour.feature.js +1 -48
- package/dist/node/operations/index.js +1 -221
- package/dist/node/presentations/index.js +1 -268
- package/dist/node/tests/operations.test-spec.js +1 -34
- package/dist/node/track.js +1 -107
- package/dist/operations/index.js +1 -221
- package/dist/presentations/index.js +1 -268
- package/dist/tests/operations.test-spec.js +1 -34
- package/dist/track.js +1 -107
- package/package.json +6 -6
|
@@ -1,221 +1 @@
|
|
|
1
|
-
|
|
2
|
-
var platformPrimitivesTourTrack = {
|
|
3
|
-
id: "platform_primitives_tour",
|
|
4
|
-
productId: "contractspec-platform",
|
|
5
|
-
name: "Platform Primitives Tour",
|
|
6
|
-
description: "Hands-on tour across identity, audit, notifications, jobs, flags, files, and metering.",
|
|
7
|
-
targetUserSegment: "platform_developer",
|
|
8
|
-
targetRole: "developer",
|
|
9
|
-
totalXp: 140,
|
|
10
|
-
completionRewards: { xpBonus: 20, badgeKey: "platform_primitives" },
|
|
11
|
-
steps: [
|
|
12
|
-
{
|
|
13
|
-
id: "identity_rbac",
|
|
14
|
-
title: "Create org and member",
|
|
15
|
-
description: "Create an org and add at least one member.",
|
|
16
|
-
order: 1,
|
|
17
|
-
completion: {
|
|
18
|
-
eventName: "org.member.added",
|
|
19
|
-
sourceModule: "@contractspec/lib.identity-rbac"
|
|
20
|
-
},
|
|
21
|
-
xpReward: 20,
|
|
22
|
-
metadata: { surface: "identity" }
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
id: "event_bus_audit",
|
|
26
|
-
title: "Emit an auditable event",
|
|
27
|
-
description: "Emit an event that lands in the audit log.",
|
|
28
|
-
order: 2,
|
|
29
|
-
completion: {
|
|
30
|
-
eventName: "audit_log.created",
|
|
31
|
-
sourceModule: "@contractspec/module.audit-trail"
|
|
32
|
-
},
|
|
33
|
-
xpReward: 20,
|
|
34
|
-
metadata: { surface: "bus+audit" }
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
id: "notifications",
|
|
38
|
-
title: "Send a notification",
|
|
39
|
-
description: "Send yourself a notification and verify delivery.",
|
|
40
|
-
order: 3,
|
|
41
|
-
completion: {
|
|
42
|
-
eventName: "notification.sent",
|
|
43
|
-
sourceModule: "@contractspec/module.notifications"
|
|
44
|
-
},
|
|
45
|
-
xpReward: 20,
|
|
46
|
-
metadata: { surface: "notifications" }
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
id: "jobs_scheduler",
|
|
50
|
-
title: "Schedule and run a job",
|
|
51
|
-
description: "Schedule a background job and let it run once.",
|
|
52
|
-
order: 4,
|
|
53
|
-
completion: {
|
|
54
|
-
eventName: "job.completed",
|
|
55
|
-
sourceModule: "@contractspec/lib.jobs"
|
|
56
|
-
},
|
|
57
|
-
xpReward: 20,
|
|
58
|
-
metadata: { surface: "jobs" }
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
id: "feature_flags",
|
|
62
|
-
title: "Create and toggle a feature flag",
|
|
63
|
-
description: "Create a feature flag and toggle it at least once.",
|
|
64
|
-
order: 5,
|
|
65
|
-
completion: {
|
|
66
|
-
eventName: "flag.toggled",
|
|
67
|
-
sourceModule: "@contractspec/lib.feature-flags"
|
|
68
|
-
},
|
|
69
|
-
xpReward: 20,
|
|
70
|
-
metadata: { surface: "feature-flags" }
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
id: "files_attachments",
|
|
74
|
-
title: "Attach a file",
|
|
75
|
-
description: "Upload and attach a file to any entity.",
|
|
76
|
-
order: 6,
|
|
77
|
-
completion: {
|
|
78
|
-
eventName: "attachment.attached",
|
|
79
|
-
sourceModule: "@contractspec/lib.files"
|
|
80
|
-
},
|
|
81
|
-
xpReward: 20,
|
|
82
|
-
metadata: { surface: "files" }
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
id: "usage_metering",
|
|
86
|
-
title: "Record usage",
|
|
87
|
-
description: "Emit a usage metric (regeneration, agent run, or similar).",
|
|
88
|
-
order: 7,
|
|
89
|
-
completion: {
|
|
90
|
-
eventName: "usage.recorded",
|
|
91
|
-
sourceModule: "@contractspec/lib.metering"
|
|
92
|
-
},
|
|
93
|
-
xpReward: 20,
|
|
94
|
-
metadata: { surface: "metering" }
|
|
95
|
-
}
|
|
96
|
-
],
|
|
97
|
-
metadata: {
|
|
98
|
-
surfacedIn: ["studio/learning", "platform/dev-center"]
|
|
99
|
-
}
|
|
100
|
-
};
|
|
101
|
-
var platformLearningTracks = [
|
|
102
|
-
platformPrimitivesTourTrack
|
|
103
|
-
];
|
|
104
|
-
|
|
105
|
-
// src/operations/index.ts
|
|
106
|
-
import { defineCommand, defineQuery } from "@contractspec/lib.contracts-spec";
|
|
107
|
-
import { defineSchemaModel, ScalarTypeEnum } from "@contractspec/lib.schema";
|
|
108
|
-
var OWNERS = ["examples.learning-journey.platform-tour"];
|
|
109
|
-
var StepModel = defineSchemaModel({
|
|
110
|
-
name: "PlatformTourStep",
|
|
111
|
-
description: "Step metadata for platform primitives tour",
|
|
112
|
-
fields: {
|
|
113
|
-
id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
114
|
-
title: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
115
|
-
description: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
116
|
-
completionEvent: {
|
|
117
|
-
type: ScalarTypeEnum.String_unsecure(),
|
|
118
|
-
isOptional: false
|
|
119
|
-
},
|
|
120
|
-
sourceModule: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
121
|
-
xpReward: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },
|
|
122
|
-
order: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true }
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
var PlatformTourTrackModel = defineSchemaModel({
|
|
126
|
-
name: "PlatformTourTrack",
|
|
127
|
-
description: "Platform primitives tour track definition",
|
|
128
|
-
fields: {
|
|
129
|
-
id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
130
|
-
name: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
131
|
-
description: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
132
|
-
totalXp: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },
|
|
133
|
-
completionXpBonus: {
|
|
134
|
-
type: ScalarTypeEnum.Int_unsecure(),
|
|
135
|
-
isOptional: true
|
|
136
|
-
},
|
|
137
|
-
completionBadgeKey: {
|
|
138
|
-
type: ScalarTypeEnum.String_unsecure(),
|
|
139
|
-
isOptional: true
|
|
140
|
-
},
|
|
141
|
-
streakHoursWindow: {
|
|
142
|
-
type: ScalarTypeEnum.Int_unsecure(),
|
|
143
|
-
isOptional: true
|
|
144
|
-
},
|
|
145
|
-
streakBonusXp: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },
|
|
146
|
-
steps: { type: StepModel, isArray: true, isOptional: false }
|
|
147
|
-
}
|
|
148
|
-
});
|
|
149
|
-
var TrackResponseModel = defineSchemaModel({
|
|
150
|
-
name: "PlatformTourTrackResponse",
|
|
151
|
-
description: "Response wrapper for platform tour track",
|
|
152
|
-
fields: {
|
|
153
|
-
track: { type: PlatformTourTrackModel, isOptional: false }
|
|
154
|
-
}
|
|
155
|
-
});
|
|
156
|
-
var RecordDemoEventInput = defineSchemaModel({
|
|
157
|
-
name: "PlatformTourRecordEventInput",
|
|
158
|
-
description: "Emit a demo event to advance platform tour steps",
|
|
159
|
-
fields: {
|
|
160
|
-
learnerId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
161
|
-
eventName: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
162
|
-
payload: { type: ScalarTypeEnum.JSON(), isOptional: true },
|
|
163
|
-
occurredAt: { type: ScalarTypeEnum.DateTime(), isOptional: true }
|
|
164
|
-
}
|
|
165
|
-
});
|
|
166
|
-
var SuccessModel = defineSchemaModel({
|
|
167
|
-
name: "PlatformTourSuccess",
|
|
168
|
-
description: "Generic success response",
|
|
169
|
-
fields: {
|
|
170
|
-
success: { type: ScalarTypeEnum.Boolean(), isOptional: false }
|
|
171
|
-
}
|
|
172
|
-
});
|
|
173
|
-
var GetPlatformTourTrack = defineQuery({
|
|
174
|
-
meta: {
|
|
175
|
-
key: "learningJourney.platformTour.getTrack",
|
|
176
|
-
version: "1.0.0",
|
|
177
|
-
stability: "experimental",
|
|
178
|
-
owners: [...OWNERS],
|
|
179
|
-
tags: ["learning", "platform", "tour"],
|
|
180
|
-
description: "Fetch platform primitives tour track definition.",
|
|
181
|
-
goal: "Expose track metadata to UIs and templates.",
|
|
182
|
-
context: "Called by Studio/Playground to render journey steps."
|
|
183
|
-
},
|
|
184
|
-
io: {
|
|
185
|
-
input: defineSchemaModel({
|
|
186
|
-
name: "PlatformTourTrackInput",
|
|
187
|
-
description: "Track input",
|
|
188
|
-
fields: {}
|
|
189
|
-
}),
|
|
190
|
-
output: TrackResponseModel
|
|
191
|
-
},
|
|
192
|
-
policy: { auth: "user" }
|
|
193
|
-
});
|
|
194
|
-
var RecordPlatformTourEvent = defineCommand({
|
|
195
|
-
meta: {
|
|
196
|
-
key: "learningJourney.platformTour.recordEvent",
|
|
197
|
-
version: "1.0.0",
|
|
198
|
-
stability: "experimental",
|
|
199
|
-
owners: [...OWNERS],
|
|
200
|
-
tags: ["learning", "platform", "tour"],
|
|
201
|
-
description: "Record an event to advance platform tour progress.",
|
|
202
|
-
goal: "Advance steps via domain events in demo/sandbox contexts.",
|
|
203
|
-
context: "Called by handlers or demo scripts to emit step completion events."
|
|
204
|
-
},
|
|
205
|
-
io: {
|
|
206
|
-
input: RecordDemoEventInput,
|
|
207
|
-
output: SuccessModel
|
|
208
|
-
},
|
|
209
|
-
policy: { auth: "user" }
|
|
210
|
-
});
|
|
211
|
-
var platformTourContracts = {
|
|
212
|
-
GetPlatformTourTrack,
|
|
213
|
-
RecordPlatformTourEvent,
|
|
214
|
-
track: platformPrimitivesTourTrack
|
|
215
|
-
};
|
|
216
|
-
export {
|
|
217
|
-
platformTourContracts,
|
|
218
|
-
RecordPlatformTourEvent,
|
|
219
|
-
PlatformTourTrackModel,
|
|
220
|
-
GetPlatformTourTrack
|
|
221
|
-
};
|
|
1
|
+
var i={id:"platform_primitives_tour",productId:"contractspec-platform",name:"Platform Primitives Tour",description:"Hands-on tour across identity, audit, notifications, jobs, flags, files, and metering.",targetUserSegment:"platform_developer",targetRole:"developer",totalXp:140,completionRewards:{xpBonus:20,badgeKey:"platform_primitives"},steps:[{id:"identity_rbac",title:"Create org and member",description:"Create an org and add at least one member.",order:1,completion:{eventName:"org.member.added",sourceModule:"@contractspec/lib.identity-rbac"},xpReward:20,metadata:{surface:"identity"}},{id:"event_bus_audit",title:"Emit an auditable event",description:"Emit an event that lands in the audit log.",order:2,completion:{eventName:"audit_log.created",sourceModule:"@contractspec/module.audit-trail"},xpReward:20,metadata:{surface:"bus+audit"}},{id:"notifications",title:"Send a notification",description:"Send yourself a notification and verify delivery.",order:3,completion:{eventName:"notification.sent",sourceModule:"@contractspec/module.notifications"},xpReward:20,metadata:{surface:"notifications"}},{id:"jobs_scheduler",title:"Schedule and run a job",description:"Schedule a background job and let it run once.",order:4,completion:{eventName:"job.completed",sourceModule:"@contractspec/lib.jobs"},xpReward:20,metadata:{surface:"jobs"}},{id:"feature_flags",title:"Create and toggle a feature flag",description:"Create a feature flag and toggle it at least once.",order:5,completion:{eventName:"flag.toggled",sourceModule:"@contractspec/lib.feature-flags"},xpReward:20,metadata:{surface:"feature-flags"}},{id:"files_attachments",title:"Attach a file",description:"Upload and attach a file to any entity.",order:6,completion:{eventName:"attachment.attached",sourceModule:"@contractspec/lib.files"},xpReward:20,metadata:{surface:"files"}},{id:"usage_metering",title:"Record usage",description:"Emit a usage metric (regeneration, agent run, or similar).",order:7,completion:{eventName:"usage.recorded",sourceModule:"@contractspec/lib.metering"},xpReward:20,metadata:{surface:"metering"}}],metadata:{surfacedIn:["studio/learning","platform/dev-center"]}},f=[i];import{defineCommand as o,defineQuery as r}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as e,ScalarTypeEnum as t}from"@contractspec/lib.schema";var a=["examples.learning-journey.platform-tour"],d=e({name:"PlatformTourStep",description:"Step metadata for platform primitives tour",fields:{id:{type:t.String_unsecure(),isOptional:!1},title:{type:t.String_unsecure(),isOptional:!1},description:{type:t.String_unsecure(),isOptional:!0},completionEvent:{type:t.String_unsecure(),isOptional:!1},sourceModule:{type:t.String_unsecure(),isOptional:!0},xpReward:{type:t.Int_unsecure(),isOptional:!0},order:{type:t.Int_unsecure(),isOptional:!0}}}),n=e({name:"PlatformTourTrack",description:"Platform primitives tour track definition",fields:{id:{type:t.String_unsecure(),isOptional:!1},name:{type:t.String_unsecure(),isOptional:!1},description:{type:t.String_unsecure(),isOptional:!0},totalXp:{type:t.Int_unsecure(),isOptional:!0},completionXpBonus:{type:t.Int_unsecure(),isOptional:!0},completionBadgeKey:{type:t.String_unsecure(),isOptional:!0},streakHoursWindow:{type:t.Int_unsecure(),isOptional:!0},streakBonusXp:{type:t.Int_unsecure(),isOptional:!0},steps:{type:d,isArray:!0,isOptional:!1}}}),s=e({name:"PlatformTourTrackResponse",description:"Response wrapper for platform tour track",fields:{track:{type:n,isOptional:!1}}}),c=e({name:"PlatformTourRecordEventInput",description:"Emit a demo event to advance platform tour steps",fields:{learnerId:{type:t.String_unsecure(),isOptional:!1},eventName:{type:t.String_unsecure(),isOptional:!1},payload:{type:t.JSON(),isOptional:!0},occurredAt:{type:t.DateTime(),isOptional:!0}}}),l=e({name:"PlatformTourSuccess",description:"Generic success response",fields:{success:{type:t.Boolean(),isOptional:!1}}}),g=r({meta:{key:"learningJourney.platformTour.getTrack",version:"1.0.0",stability:"experimental",owners:[...a],tags:["learning","platform","tour"],description:"Fetch platform primitives tour track definition.",goal:"Expose track metadata to UIs and templates.",context:"Called by Studio/Playground to render journey steps."},io:{input:e({name:"PlatformTourTrackInput",description:"Track input",fields:{}}),output:s},policy:{auth:"user"}}),u=o({meta:{key:"learningJourney.platformTour.recordEvent",version:"1.0.0",stability:"experimental",owners:[...a],tags:["learning","platform","tour"],description:"Record an event to advance platform tour progress.",goal:"Advance steps via domain events in demo/sandbox contexts.",context:"Called by handlers or demo scripts to emit step completion events."},io:{input:c,output:l},policy:{auth:"user"}}),_={GetPlatformTourTrack:g,RecordPlatformTourEvent:u,track:i};export{_ as platformTourContracts,u as RecordPlatformTourEvent,n as PlatformTourTrackModel,g as GetPlatformTourTrack};
|
|
@@ -1,268 +1 @@
|
|
|
1
|
-
|
|
2
|
-
var platformPrimitivesTourTrack = {
|
|
3
|
-
id: "platform_primitives_tour",
|
|
4
|
-
productId: "contractspec-platform",
|
|
5
|
-
name: "Platform Primitives Tour",
|
|
6
|
-
description: "Hands-on tour across identity, audit, notifications, jobs, flags, files, and metering.",
|
|
7
|
-
targetUserSegment: "platform_developer",
|
|
8
|
-
targetRole: "developer",
|
|
9
|
-
totalXp: 140,
|
|
10
|
-
completionRewards: { xpBonus: 20, badgeKey: "platform_primitives" },
|
|
11
|
-
steps: [
|
|
12
|
-
{
|
|
13
|
-
id: "identity_rbac",
|
|
14
|
-
title: "Create org and member",
|
|
15
|
-
description: "Create an org and add at least one member.",
|
|
16
|
-
order: 1,
|
|
17
|
-
completion: {
|
|
18
|
-
eventName: "org.member.added",
|
|
19
|
-
sourceModule: "@contractspec/lib.identity-rbac"
|
|
20
|
-
},
|
|
21
|
-
xpReward: 20,
|
|
22
|
-
metadata: { surface: "identity" }
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
id: "event_bus_audit",
|
|
26
|
-
title: "Emit an auditable event",
|
|
27
|
-
description: "Emit an event that lands in the audit log.",
|
|
28
|
-
order: 2,
|
|
29
|
-
completion: {
|
|
30
|
-
eventName: "audit_log.created",
|
|
31
|
-
sourceModule: "@contractspec/module.audit-trail"
|
|
32
|
-
},
|
|
33
|
-
xpReward: 20,
|
|
34
|
-
metadata: { surface: "bus+audit" }
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
id: "notifications",
|
|
38
|
-
title: "Send a notification",
|
|
39
|
-
description: "Send yourself a notification and verify delivery.",
|
|
40
|
-
order: 3,
|
|
41
|
-
completion: {
|
|
42
|
-
eventName: "notification.sent",
|
|
43
|
-
sourceModule: "@contractspec/module.notifications"
|
|
44
|
-
},
|
|
45
|
-
xpReward: 20,
|
|
46
|
-
metadata: { surface: "notifications" }
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
id: "jobs_scheduler",
|
|
50
|
-
title: "Schedule and run a job",
|
|
51
|
-
description: "Schedule a background job and let it run once.",
|
|
52
|
-
order: 4,
|
|
53
|
-
completion: {
|
|
54
|
-
eventName: "job.completed",
|
|
55
|
-
sourceModule: "@contractspec/lib.jobs"
|
|
56
|
-
},
|
|
57
|
-
xpReward: 20,
|
|
58
|
-
metadata: { surface: "jobs" }
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
id: "feature_flags",
|
|
62
|
-
title: "Create and toggle a feature flag",
|
|
63
|
-
description: "Create a feature flag and toggle it at least once.",
|
|
64
|
-
order: 5,
|
|
65
|
-
completion: {
|
|
66
|
-
eventName: "flag.toggled",
|
|
67
|
-
sourceModule: "@contractspec/lib.feature-flags"
|
|
68
|
-
},
|
|
69
|
-
xpReward: 20,
|
|
70
|
-
metadata: { surface: "feature-flags" }
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
id: "files_attachments",
|
|
74
|
-
title: "Attach a file",
|
|
75
|
-
description: "Upload and attach a file to any entity.",
|
|
76
|
-
order: 6,
|
|
77
|
-
completion: {
|
|
78
|
-
eventName: "attachment.attached",
|
|
79
|
-
sourceModule: "@contractspec/lib.files"
|
|
80
|
-
},
|
|
81
|
-
xpReward: 20,
|
|
82
|
-
metadata: { surface: "files" }
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
id: "usage_metering",
|
|
86
|
-
title: "Record usage",
|
|
87
|
-
description: "Emit a usage metric (regeneration, agent run, or similar).",
|
|
88
|
-
order: 7,
|
|
89
|
-
completion: {
|
|
90
|
-
eventName: "usage.recorded",
|
|
91
|
-
sourceModule: "@contractspec/lib.metering"
|
|
92
|
-
},
|
|
93
|
-
xpReward: 20,
|
|
94
|
-
metadata: { surface: "metering" }
|
|
95
|
-
}
|
|
96
|
-
],
|
|
97
|
-
metadata: {
|
|
98
|
-
surfacedIn: ["studio/learning", "platform/dev-center"]
|
|
99
|
-
}
|
|
100
|
-
};
|
|
101
|
-
var platformLearningTracks = [
|
|
102
|
-
platformPrimitivesTourTrack
|
|
103
|
-
];
|
|
104
|
-
|
|
105
|
-
// src/operations/index.ts
|
|
106
|
-
import { defineCommand, defineQuery } from "@contractspec/lib.contracts-spec";
|
|
107
|
-
import { defineSchemaModel, ScalarTypeEnum } from "@contractspec/lib.schema";
|
|
108
|
-
var OWNERS = ["examples.learning-journey.platform-tour"];
|
|
109
|
-
var StepModel = defineSchemaModel({
|
|
110
|
-
name: "PlatformTourStep",
|
|
111
|
-
description: "Step metadata for platform primitives tour",
|
|
112
|
-
fields: {
|
|
113
|
-
id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
114
|
-
title: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
115
|
-
description: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
116
|
-
completionEvent: {
|
|
117
|
-
type: ScalarTypeEnum.String_unsecure(),
|
|
118
|
-
isOptional: false
|
|
119
|
-
},
|
|
120
|
-
sourceModule: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
121
|
-
xpReward: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },
|
|
122
|
-
order: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true }
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
var PlatformTourTrackModel = defineSchemaModel({
|
|
126
|
-
name: "PlatformTourTrack",
|
|
127
|
-
description: "Platform primitives tour track definition",
|
|
128
|
-
fields: {
|
|
129
|
-
id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
130
|
-
name: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
131
|
-
description: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
132
|
-
totalXp: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },
|
|
133
|
-
completionXpBonus: {
|
|
134
|
-
type: ScalarTypeEnum.Int_unsecure(),
|
|
135
|
-
isOptional: true
|
|
136
|
-
},
|
|
137
|
-
completionBadgeKey: {
|
|
138
|
-
type: ScalarTypeEnum.String_unsecure(),
|
|
139
|
-
isOptional: true
|
|
140
|
-
},
|
|
141
|
-
streakHoursWindow: {
|
|
142
|
-
type: ScalarTypeEnum.Int_unsecure(),
|
|
143
|
-
isOptional: true
|
|
144
|
-
},
|
|
145
|
-
streakBonusXp: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },
|
|
146
|
-
steps: { type: StepModel, isArray: true, isOptional: false }
|
|
147
|
-
}
|
|
148
|
-
});
|
|
149
|
-
var TrackResponseModel = defineSchemaModel({
|
|
150
|
-
name: "PlatformTourTrackResponse",
|
|
151
|
-
description: "Response wrapper for platform tour track",
|
|
152
|
-
fields: {
|
|
153
|
-
track: { type: PlatformTourTrackModel, isOptional: false }
|
|
154
|
-
}
|
|
155
|
-
});
|
|
156
|
-
var RecordDemoEventInput = defineSchemaModel({
|
|
157
|
-
name: "PlatformTourRecordEventInput",
|
|
158
|
-
description: "Emit a demo event to advance platform tour steps",
|
|
159
|
-
fields: {
|
|
160
|
-
learnerId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
161
|
-
eventName: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
162
|
-
payload: { type: ScalarTypeEnum.JSON(), isOptional: true },
|
|
163
|
-
occurredAt: { type: ScalarTypeEnum.DateTime(), isOptional: true }
|
|
164
|
-
}
|
|
165
|
-
});
|
|
166
|
-
var SuccessModel = defineSchemaModel({
|
|
167
|
-
name: "PlatformTourSuccess",
|
|
168
|
-
description: "Generic success response",
|
|
169
|
-
fields: {
|
|
170
|
-
success: { type: ScalarTypeEnum.Boolean(), isOptional: false }
|
|
171
|
-
}
|
|
172
|
-
});
|
|
173
|
-
var GetPlatformTourTrack = defineQuery({
|
|
174
|
-
meta: {
|
|
175
|
-
key: "learningJourney.platformTour.getTrack",
|
|
176
|
-
version: "1.0.0",
|
|
177
|
-
stability: "experimental",
|
|
178
|
-
owners: [...OWNERS],
|
|
179
|
-
tags: ["learning", "platform", "tour"],
|
|
180
|
-
description: "Fetch platform primitives tour track definition.",
|
|
181
|
-
goal: "Expose track metadata to UIs and templates.",
|
|
182
|
-
context: "Called by Studio/Playground to render journey steps."
|
|
183
|
-
},
|
|
184
|
-
io: {
|
|
185
|
-
input: defineSchemaModel({
|
|
186
|
-
name: "PlatformTourTrackInput",
|
|
187
|
-
description: "Track input",
|
|
188
|
-
fields: {}
|
|
189
|
-
}),
|
|
190
|
-
output: TrackResponseModel
|
|
191
|
-
},
|
|
192
|
-
policy: { auth: "user" }
|
|
193
|
-
});
|
|
194
|
-
var RecordPlatformTourEvent = defineCommand({
|
|
195
|
-
meta: {
|
|
196
|
-
key: "learningJourney.platformTour.recordEvent",
|
|
197
|
-
version: "1.0.0",
|
|
198
|
-
stability: "experimental",
|
|
199
|
-
owners: [...OWNERS],
|
|
200
|
-
tags: ["learning", "platform", "tour"],
|
|
201
|
-
description: "Record an event to advance platform tour progress.",
|
|
202
|
-
goal: "Advance steps via domain events in demo/sandbox contexts.",
|
|
203
|
-
context: "Called by handlers or demo scripts to emit step completion events."
|
|
204
|
-
},
|
|
205
|
-
io: {
|
|
206
|
-
input: RecordDemoEventInput,
|
|
207
|
-
output: SuccessModel
|
|
208
|
-
},
|
|
209
|
-
policy: { auth: "user" }
|
|
210
|
-
});
|
|
211
|
-
var platformTourContracts = {
|
|
212
|
-
GetPlatformTourTrack,
|
|
213
|
-
RecordPlatformTourEvent,
|
|
214
|
-
track: platformPrimitivesTourTrack
|
|
215
|
-
};
|
|
216
|
-
|
|
217
|
-
// src/presentations/index.ts
|
|
218
|
-
import {
|
|
219
|
-
definePresentation,
|
|
220
|
-
StabilityEnum
|
|
221
|
-
} from "@contractspec/lib.contracts-spec";
|
|
222
|
-
var baseMeta = {
|
|
223
|
-
domain: "learning-journey",
|
|
224
|
-
title: "Platform Tour",
|
|
225
|
-
owners: ["@examples.learning-journey.platform-tour"],
|
|
226
|
-
tags: ["learning", "platform", "tour"],
|
|
227
|
-
stability: StabilityEnum.Experimental,
|
|
228
|
-
goal: "Visualize platform tour progress",
|
|
229
|
-
context: "Used in platform tour dashboard and widgets"
|
|
230
|
-
};
|
|
231
|
-
var PlatformTourTrackPresentation = definePresentation({
|
|
232
|
-
meta: {
|
|
233
|
-
key: "learning.journey.platform.track",
|
|
234
|
-
version: "1.0.0",
|
|
235
|
-
description: "Platform primitives tour track detail",
|
|
236
|
-
...baseMeta
|
|
237
|
-
},
|
|
238
|
-
source: {
|
|
239
|
-
type: "component",
|
|
240
|
-
framework: "react",
|
|
241
|
-
componentKey: "LearningTrackDetail",
|
|
242
|
-
props: PlatformTourTrackModel
|
|
243
|
-
},
|
|
244
|
-
targets: ["react", "markdown", "application/json"]
|
|
245
|
-
});
|
|
246
|
-
var PlatformTourWidgetPresentation = definePresentation({
|
|
247
|
-
meta: {
|
|
248
|
-
key: "learning.journey.platform.widget",
|
|
249
|
-
version: "1.0.0",
|
|
250
|
-
description: "Compact widget for platform tour progress",
|
|
251
|
-
...baseMeta
|
|
252
|
-
},
|
|
253
|
-
source: {
|
|
254
|
-
type: "component",
|
|
255
|
-
framework: "react",
|
|
256
|
-
componentKey: "LearningTrackProgressWidget"
|
|
257
|
-
},
|
|
258
|
-
targets: ["react"]
|
|
259
|
-
});
|
|
260
|
-
var platformTourPresentations = [
|
|
261
|
-
PlatformTourTrackPresentation,
|
|
262
|
-
PlatformTourWidgetPresentation
|
|
263
|
-
];
|
|
264
|
-
export {
|
|
265
|
-
platformTourPresentations,
|
|
266
|
-
PlatformTourWidgetPresentation,
|
|
267
|
-
PlatformTourTrackPresentation
|
|
268
|
-
};
|
|
1
|
+
var i={id:"platform_primitives_tour",productId:"contractspec-platform",name:"Platform Primitives Tour",description:"Hands-on tour across identity, audit, notifications, jobs, flags, files, and metering.",targetUserSegment:"platform_developer",targetRole:"developer",totalXp:140,completionRewards:{xpBonus:20,badgeKey:"platform_primitives"},steps:[{id:"identity_rbac",title:"Create org and member",description:"Create an org and add at least one member.",order:1,completion:{eventName:"org.member.added",sourceModule:"@contractspec/lib.identity-rbac"},xpReward:20,metadata:{surface:"identity"}},{id:"event_bus_audit",title:"Emit an auditable event",description:"Emit an event that lands in the audit log.",order:2,completion:{eventName:"audit_log.created",sourceModule:"@contractspec/module.audit-trail"},xpReward:20,metadata:{surface:"bus+audit"}},{id:"notifications",title:"Send a notification",description:"Send yourself a notification and verify delivery.",order:3,completion:{eventName:"notification.sent",sourceModule:"@contractspec/module.notifications"},xpReward:20,metadata:{surface:"notifications"}},{id:"jobs_scheduler",title:"Schedule and run a job",description:"Schedule a background job and let it run once.",order:4,completion:{eventName:"job.completed",sourceModule:"@contractspec/lib.jobs"},xpReward:20,metadata:{surface:"jobs"}},{id:"feature_flags",title:"Create and toggle a feature flag",description:"Create a feature flag and toggle it at least once.",order:5,completion:{eventName:"flag.toggled",sourceModule:"@contractspec/lib.feature-flags"},xpReward:20,metadata:{surface:"feature-flags"}},{id:"files_attachments",title:"Attach a file",description:"Upload and attach a file to any entity.",order:6,completion:{eventName:"attachment.attached",sourceModule:"@contractspec/lib.files"},xpReward:20,metadata:{surface:"files"}},{id:"usage_metering",title:"Record usage",description:"Emit a usage metric (regeneration, agent run, or similar).",order:7,completion:{eventName:"usage.recorded",sourceModule:"@contractspec/lib.metering"},xpReward:20,metadata:{surface:"metering"}}],metadata:{surfacedIn:["studio/learning","platform/dev-center"]}},_=[i];import{defineCommand as n,defineQuery as s}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as e,ScalarTypeEnum as t}from"@contractspec/lib.schema";var o=["examples.learning-journey.platform-tour"],c=e({name:"PlatformTourStep",description:"Step metadata for platform primitives tour",fields:{id:{type:t.String_unsecure(),isOptional:!1},title:{type:t.String_unsecure(),isOptional:!1},description:{type:t.String_unsecure(),isOptional:!0},completionEvent:{type:t.String_unsecure(),isOptional:!1},sourceModule:{type:t.String_unsecure(),isOptional:!0},xpReward:{type:t.Int_unsecure(),isOptional:!0},order:{type:t.Int_unsecure(),isOptional:!0}}}),a=e({name:"PlatformTourTrack",description:"Platform primitives tour track definition",fields:{id:{type:t.String_unsecure(),isOptional:!1},name:{type:t.String_unsecure(),isOptional:!1},description:{type:t.String_unsecure(),isOptional:!0},totalXp:{type:t.Int_unsecure(),isOptional:!0},completionXpBonus:{type:t.Int_unsecure(),isOptional:!0},completionBadgeKey:{type:t.String_unsecure(),isOptional:!0},streakHoursWindow:{type:t.Int_unsecure(),isOptional:!0},streakBonusXp:{type:t.Int_unsecure(),isOptional:!0},steps:{type:c,isArray:!0,isOptional:!1}}}),g=e({name:"PlatformTourTrackResponse",description:"Response wrapper for platform tour track",fields:{track:{type:a,isOptional:!1}}}),l=e({name:"PlatformTourRecordEventInput",description:"Emit a demo event to advance platform tour steps",fields:{learnerId:{type:t.String_unsecure(),isOptional:!1},eventName:{type:t.String_unsecure(),isOptional:!1},payload:{type:t.JSON(),isOptional:!0},occurredAt:{type:t.DateTime(),isOptional:!0}}}),u=e({name:"PlatformTourSuccess",description:"Generic success response",fields:{success:{type:t.Boolean(),isOptional:!1}}}),f=s({meta:{key:"learningJourney.platformTour.getTrack",version:"1.0.0",stability:"experimental",owners:[...o],tags:["learning","platform","tour"],description:"Fetch platform primitives tour track definition.",goal:"Expose track metadata to UIs and templates.",context:"Called by Studio/Playground to render journey steps."},io:{input:e({name:"PlatformTourTrackInput",description:"Track input",fields:{}}),output:g},policy:{auth:"user"}}),p=n({meta:{key:"learningJourney.platformTour.recordEvent",version:"1.0.0",stability:"experimental",owners:[...o],tags:["learning","platform","tour"],description:"Record an event to advance platform tour progress.",goal:"Advance steps via domain events in demo/sandbox contexts.",context:"Called by handlers or demo scripts to emit step completion events."},io:{input:l,output:u},policy:{auth:"user"}}),R={GetPlatformTourTrack:f,RecordPlatformTourEvent:p,track:i};import{definePresentation as r,StabilityEnum as m}from"@contractspec/lib.contracts-spec";var d={domain:"learning-journey",title:"Platform Tour",owners:["@examples.learning-journey.platform-tour"],tags:["learning","platform","tour"],stability:m.Experimental,goal:"Visualize platform tour progress",context:"Used in platform tour dashboard and widgets"},b=r({meta:{key:"learning.journey.platform.track",version:"1.0.0",description:"Platform primitives tour track detail",...d},source:{type:"component",framework:"react",componentKey:"LearningTrackDetail",props:a},targets:["react","markdown","application/json"]}),v=r({meta:{key:"learning.journey.platform.widget",version:"1.0.0",description:"Compact widget for platform tour progress",...d},source:{type:"component",framework:"react",componentKey:"LearningTrackProgressWidget"},targets:["react"]}),J=[b,v];export{J as platformTourPresentations,v as PlatformTourWidgetPresentation,b as PlatformTourTrackPresentation};
|
|
@@ -1,34 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { defineTestSpec } from "@contractspec/lib.contracts-spec/tests";
|
|
3
|
-
var GetTrackTest = defineTestSpec({
|
|
4
|
-
meta: {
|
|
5
|
-
key: "learningJourney.platformTour.getTrack.test",
|
|
6
|
-
version: "1.0.0",
|
|
7
|
-
stability: "experimental",
|
|
8
|
-
owners: ["@example.learning-journey-platform-tour"],
|
|
9
|
-
description: "Test for getting platform tour track",
|
|
10
|
-
tags: ["test"]
|
|
11
|
-
},
|
|
12
|
-
target: {
|
|
13
|
-
type: "operation",
|
|
14
|
-
operation: {
|
|
15
|
-
key: "learningJourney.platformTour.getTrack",
|
|
16
|
-
version: "1.0.0"
|
|
17
|
-
}
|
|
18
|
-
},
|
|
19
|
-
scenarios: [
|
|
20
|
-
{
|
|
21
|
-
key: "success",
|
|
22
|
-
when: { operation: { key: "learningJourney.platformTour.getTrack" } },
|
|
23
|
-
then: [{ type: "expectOutput", match: {} }]
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
key: "error",
|
|
27
|
-
when: { operation: { key: "learningJourney.platformTour.getTrack" } },
|
|
28
|
-
then: [{ type: "expectError" }]
|
|
29
|
-
}
|
|
30
|
-
]
|
|
31
|
-
});
|
|
32
|
-
export {
|
|
33
|
-
GetTrackTest
|
|
34
|
-
};
|
|
1
|
+
import{defineTestSpec as g}from"@contractspec/lib.contracts-spec/tests";var j=g({meta:{key:"learningJourney.platformTour.getTrack.test",version:"1.0.0",stability:"experimental",owners:["@example.learning-journey-platform-tour"],description:"Test for getting platform tour track",tags:["test"]},target:{type:"operation",operation:{key:"learningJourney.platformTour.getTrack",version:"1.0.0"}},scenarios:[{key:"success",when:{operation:{key:"learningJourney.platformTour.getTrack"}},then:[{type:"expectOutput",match:{}}]},{key:"error",when:{operation:{key:"learningJourney.platformTour.getTrack"}},then:[{type:"expectError"}]}]});export{j as GetTrackTest};
|
package/dist/node/track.js
CHANGED
|
@@ -1,107 +1 @@
|
|
|
1
|
-
|
|
2
|
-
var platformPrimitivesTourTrack = {
|
|
3
|
-
id: "platform_primitives_tour",
|
|
4
|
-
productId: "contractspec-platform",
|
|
5
|
-
name: "Platform Primitives Tour",
|
|
6
|
-
description: "Hands-on tour across identity, audit, notifications, jobs, flags, files, and metering.",
|
|
7
|
-
targetUserSegment: "platform_developer",
|
|
8
|
-
targetRole: "developer",
|
|
9
|
-
totalXp: 140,
|
|
10
|
-
completionRewards: { xpBonus: 20, badgeKey: "platform_primitives" },
|
|
11
|
-
steps: [
|
|
12
|
-
{
|
|
13
|
-
id: "identity_rbac",
|
|
14
|
-
title: "Create org and member",
|
|
15
|
-
description: "Create an org and add at least one member.",
|
|
16
|
-
order: 1,
|
|
17
|
-
completion: {
|
|
18
|
-
eventName: "org.member.added",
|
|
19
|
-
sourceModule: "@contractspec/lib.identity-rbac"
|
|
20
|
-
},
|
|
21
|
-
xpReward: 20,
|
|
22
|
-
metadata: { surface: "identity" }
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
id: "event_bus_audit",
|
|
26
|
-
title: "Emit an auditable event",
|
|
27
|
-
description: "Emit an event that lands in the audit log.",
|
|
28
|
-
order: 2,
|
|
29
|
-
completion: {
|
|
30
|
-
eventName: "audit_log.created",
|
|
31
|
-
sourceModule: "@contractspec/module.audit-trail"
|
|
32
|
-
},
|
|
33
|
-
xpReward: 20,
|
|
34
|
-
metadata: { surface: "bus+audit" }
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
id: "notifications",
|
|
38
|
-
title: "Send a notification",
|
|
39
|
-
description: "Send yourself a notification and verify delivery.",
|
|
40
|
-
order: 3,
|
|
41
|
-
completion: {
|
|
42
|
-
eventName: "notification.sent",
|
|
43
|
-
sourceModule: "@contractspec/module.notifications"
|
|
44
|
-
},
|
|
45
|
-
xpReward: 20,
|
|
46
|
-
metadata: { surface: "notifications" }
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
id: "jobs_scheduler",
|
|
50
|
-
title: "Schedule and run a job",
|
|
51
|
-
description: "Schedule a background job and let it run once.",
|
|
52
|
-
order: 4,
|
|
53
|
-
completion: {
|
|
54
|
-
eventName: "job.completed",
|
|
55
|
-
sourceModule: "@contractspec/lib.jobs"
|
|
56
|
-
},
|
|
57
|
-
xpReward: 20,
|
|
58
|
-
metadata: { surface: "jobs" }
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
id: "feature_flags",
|
|
62
|
-
title: "Create and toggle a feature flag",
|
|
63
|
-
description: "Create a feature flag and toggle it at least once.",
|
|
64
|
-
order: 5,
|
|
65
|
-
completion: {
|
|
66
|
-
eventName: "flag.toggled",
|
|
67
|
-
sourceModule: "@contractspec/lib.feature-flags"
|
|
68
|
-
},
|
|
69
|
-
xpReward: 20,
|
|
70
|
-
metadata: { surface: "feature-flags" }
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
id: "files_attachments",
|
|
74
|
-
title: "Attach a file",
|
|
75
|
-
description: "Upload and attach a file to any entity.",
|
|
76
|
-
order: 6,
|
|
77
|
-
completion: {
|
|
78
|
-
eventName: "attachment.attached",
|
|
79
|
-
sourceModule: "@contractspec/lib.files"
|
|
80
|
-
},
|
|
81
|
-
xpReward: 20,
|
|
82
|
-
metadata: { surface: "files" }
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
id: "usage_metering",
|
|
86
|
-
title: "Record usage",
|
|
87
|
-
description: "Emit a usage metric (regeneration, agent run, or similar).",
|
|
88
|
-
order: 7,
|
|
89
|
-
completion: {
|
|
90
|
-
eventName: "usage.recorded",
|
|
91
|
-
sourceModule: "@contractspec/lib.metering"
|
|
92
|
-
},
|
|
93
|
-
xpReward: 20,
|
|
94
|
-
metadata: { surface: "metering" }
|
|
95
|
-
}
|
|
96
|
-
],
|
|
97
|
-
metadata: {
|
|
98
|
-
surfacedIn: ["studio/learning", "platform/dev-center"]
|
|
99
|
-
}
|
|
100
|
-
};
|
|
101
|
-
var platformLearningTracks = [
|
|
102
|
-
platformPrimitivesTourTrack
|
|
103
|
-
];
|
|
104
|
-
export {
|
|
105
|
-
platformPrimitivesTourTrack,
|
|
106
|
-
platformLearningTracks
|
|
107
|
-
};
|
|
1
|
+
var e={id:"platform_primitives_tour",productId:"contractspec-platform",name:"Platform Primitives Tour",description:"Hands-on tour across identity, audit, notifications, jobs, flags, files, and metering.",targetUserSegment:"platform_developer",targetRole:"developer",totalXp:140,completionRewards:{xpBonus:20,badgeKey:"platform_primitives"},steps:[{id:"identity_rbac",title:"Create org and member",description:"Create an org and add at least one member.",order:1,completion:{eventName:"org.member.added",sourceModule:"@contractspec/lib.identity-rbac"},xpReward:20,metadata:{surface:"identity"}},{id:"event_bus_audit",title:"Emit an auditable event",description:"Emit an event that lands in the audit log.",order:2,completion:{eventName:"audit_log.created",sourceModule:"@contractspec/module.audit-trail"},xpReward:20,metadata:{surface:"bus+audit"}},{id:"notifications",title:"Send a notification",description:"Send yourself a notification and verify delivery.",order:3,completion:{eventName:"notification.sent",sourceModule:"@contractspec/module.notifications"},xpReward:20,metadata:{surface:"notifications"}},{id:"jobs_scheduler",title:"Schedule and run a job",description:"Schedule a background job and let it run once.",order:4,completion:{eventName:"job.completed",sourceModule:"@contractspec/lib.jobs"},xpReward:20,metadata:{surface:"jobs"}},{id:"feature_flags",title:"Create and toggle a feature flag",description:"Create a feature flag and toggle it at least once.",order:5,completion:{eventName:"flag.toggled",sourceModule:"@contractspec/lib.feature-flags"},xpReward:20,metadata:{surface:"feature-flags"}},{id:"files_attachments",title:"Attach a file",description:"Upload and attach a file to any entity.",order:6,completion:{eventName:"attachment.attached",sourceModule:"@contractspec/lib.files"},xpReward:20,metadata:{surface:"files"}},{id:"usage_metering",title:"Record usage",description:"Emit a usage metric (regeneration, agent run, or similar).",order:7,completion:{eventName:"usage.recorded",sourceModule:"@contractspec/lib.metering"},xpReward:20,metadata:{surface:"metering"}}],metadata:{surfacedIn:["studio/learning","platform/dev-center"]}},t=[e];export{e as platformPrimitivesTourTrack,t as platformLearningTracks};
|