@superbuilders/primer-tives 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +40 -46
- package/dist/choice-state.d.ts +8 -0
- package/dist/choice-state.d.ts.map +1 -0
- package/dist/client.d.ts +2 -8
- package/dist/client.d.ts.map +1 -1
- package/dist/consumed.d.ts +6 -0
- package/dist/consumed.d.ts.map +1 -0
- package/dist/errors.d.ts +2 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/extended-text-state.d.ts +8 -0
- package/dist/extended-text-state.d.ts.map +1 -0
- package/dist/feedback-state.d.ts +7 -0
- package/dist/feedback-state.d.ts.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +573 -0
- package/dist/index.js.map +21 -0
- package/dist/observation-state.d.ts +6 -0
- package/dist/observation-state.d.ts.map +1 -0
- package/dist/pci-state.d.ts +6 -0
- package/dist/pci-state.d.ts.map +1 -0
- package/dist/session-context.d.ts +24 -0
- package/dist/session-context.d.ts.map +1 -0
- package/dist/session.d.ts +16 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/text-entry-state.d.ts +8 -0
- package/dist/text-entry-state.d.ts.map +1 -0
- package/dist/transport.d.ts +46 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/types.d.ts +11 -3
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -20
- package/dist/client.js +0 -383
- package/dist/client.js.map +0 -11
- package/dist/content.js +0 -27
- package/dist/content.js.map +0 -10
- package/dist/errors.js +0 -36
- package/dist/errors.js.map +0 -10
- package/dist/pci.js +0 -2
- package/dist/pci.js.map +0 -9
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -9
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SessionContext } from "./session-context";
|
|
2
|
+
import type { PciId } from "./pci";
|
|
3
|
+
import type { PrimerState, RendererStimulus } from "./types";
|
|
4
|
+
declare function observationState<Pcis extends PciId>(ctx: SessionContext<Pcis>, stimulus: RendererStimulus | null): PrimerState<Pcis>;
|
|
5
|
+
export { observationState };
|
|
6
|
+
//# sourceMappingURL=observation-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observation-state.d.ts","sourceRoot":"","sources":["../src/observation-state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAA;AACjF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AAEtF,iBAAS,gBAAgB,CAAC,IAAI,SAAS,KAAK,EAC3C,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,EACzB,QAAQ,EAAE,gBAAgB,GAAG,IAAI,GAC/B,WAAW,CAAC,IAAI,CAAC,CAenB;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { PciId } from "./pci";
|
|
2
|
+
import type { SessionContext } from "./session-context";
|
|
3
|
+
import type { PciInteraction, PciInteractionState, RendererStimulus } from "./types";
|
|
4
|
+
declare function pciInteractionState<Pcis extends PciId>(ctx: SessionContext<Pcis>, stimulus: RendererStimulus | null, interaction: PciInteraction<Pcis>): PciInteractionState<Pcis>;
|
|
5
|
+
export { pciInteractionState };
|
|
6
|
+
//# sourceMappingURL=pci-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pci-state.d.ts","sourceRoot":"","sources":["../src/pci-state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAY,MAAM,iCAAiC,CAAA;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAA;AACjF,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAe,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AAE3H,iBAAS,mBAAmB,CAAC,IAAI,SAAS,KAAK,EAC9C,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,EACzB,QAAQ,EAAE,gBAAgB,GAAG,IAAI,EACjC,WAAW,EAAE,cAAc,CAAC,IAAI,CAAC,GAC/B,mBAAmB,CAAC,IAAI,CAAC,CAkC3B;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { PciId } from "./pci";
|
|
2
|
+
import type { ErroredState, PrimerState, RendererSubmission } from "./types";
|
|
3
|
+
interface PrimerLogger {
|
|
4
|
+
debug(message: string, attributes?: Record<string, unknown>): void;
|
|
5
|
+
info(message: string, attributes?: Record<string, unknown>): void;
|
|
6
|
+
warn(message: string, attributes?: Record<string, unknown>): void;
|
|
7
|
+
error(message: string, attributes?: Record<string, unknown>): void;
|
|
8
|
+
}
|
|
9
|
+
type TransitionPhase = "observation" | "interaction" | "timeout";
|
|
10
|
+
type WireIntent<Pcis extends PciId = PciId> = {
|
|
11
|
+
kind: "observation";
|
|
12
|
+
} | {
|
|
13
|
+
kind: "interaction";
|
|
14
|
+
submission: RendererSubmission<Pcis>;
|
|
15
|
+
} | {
|
|
16
|
+
kind: "timeout";
|
|
17
|
+
};
|
|
18
|
+
interface SessionContext<Pcis extends PciId = PciId> {
|
|
19
|
+
readonly log: PrimerLogger | undefined;
|
|
20
|
+
execute(intent: WireIntent<Pcis>, phase: TransitionPhase): Promise<PrimerState<Pcis>>;
|
|
21
|
+
errored(error: Error, failedPhase: TransitionPhase, intent: WireIntent<Pcis>): ErroredState<Pcis>;
|
|
22
|
+
}
|
|
23
|
+
export type { PrimerLogger, SessionContext, TransitionPhase, WireIntent };
|
|
24
|
+
//# sourceMappingURL=session-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-context.d.ts","sourceRoot":"","sources":["../src/session-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AAEtG,UAAU,YAAY;IACrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IAClE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IACjE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IACjE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;CAClE;AAED,KAAK,eAAe,GAAG,aAAa,GAAG,aAAa,GAAG,SAAS,CAAA;AAEhE,KAAK,UAAU,CAAC,IAAI,SAAS,KAAK,GAAG,KAAK,IACvC;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAA;CAAE,GAC7D;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAA;AAEtB,UAAU,cAAc,CAAC,IAAI,SAAS,KAAK,GAAG,KAAK;IAClD,QAAQ,CAAC,GAAG,EAAE,YAAY,GAAG,SAAS,CAAA;IACtC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA;IACrF,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;CACjG;AAED,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { PciId } from "./pci";
|
|
2
|
+
import type { PrimerLogger, TransitionPhase, WireIntent } from "./session-context";
|
|
3
|
+
import type { TransportResult, WireRequestBody } from "./transport";
|
|
4
|
+
import type { PrimerState } from "./types";
|
|
5
|
+
interface SessionConfig<Pcis extends PciId = PciId> {
|
|
6
|
+
readonly studentId: string;
|
|
7
|
+
readonly supportedPcis: readonly Pcis[];
|
|
8
|
+
readonly log: PrimerLogger | undefined;
|
|
9
|
+
readonly transport: (body: WireRequestBody<Pcis>) => Promise<TransportResult<Pcis>>;
|
|
10
|
+
}
|
|
11
|
+
declare function makeSession<Pcis extends PciId>(sc: SessionConfig<Pcis>): {
|
|
12
|
+
execute: (intent: WireIntent<Pcis>, phase: TransitionPhase) => Promise<PrimerState<Pcis>>;
|
|
13
|
+
};
|
|
14
|
+
export { makeSession };
|
|
15
|
+
export type { SessionConfig };
|
|
16
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAkB,eAAe,EAAE,UAAU,EAAE,MAAM,6CAA6C,CAAA;AAC5H,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAc,MAAM,uCAAuC,CAAA;AACzG,OAAO,KAAK,EAEX,WAAW,EAGX,MAAM,mCAAmC,CAAA;AAQ1C,UAAU,aAAa,CAAC,IAAI,SAAS,KAAK,GAAG,KAAK;IACjD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,aAAa,EAAE,SAAS,IAAI,EAAE,CAAA;IACvC,QAAQ,CAAC,GAAG,EAAE,YAAY,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAA;CACnF;AAED,iBAAS,WAAW,CAAC,IAAI,SAAS,KAAK,EAAE,EAAE,EAAE,aAAa,CAAC,IAAI,CAAC;sBA8CtD,UAAU,CAAC,IAAI,CAAC,SACjB,eAAe,KACpB,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;EA0E7B;AAED,OAAO,EAAE,WAAW,EAAE,CAAA;AACtB,YAAY,EAAE,aAAa,EAAE,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SessionContext } from "./session-context";
|
|
2
|
+
import type { PciId } from "./pci";
|
|
3
|
+
import type { PrimerState, RendererInteraction, RendererStimulus } from "./types";
|
|
4
|
+
declare function textEntryState<Pcis extends PciId>(ctx: SessionContext<Pcis>, stimulus: RendererStimulus | null, interaction: Extract<RendererInteraction<Pcis>, {
|
|
5
|
+
type: "text-entry";
|
|
6
|
+
}>): PrimerState<Pcis>;
|
|
7
|
+
export { textEntryState };
|
|
8
|
+
//# sourceMappingURL=text-entry-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-entry-state.d.ts","sourceRoot":"","sources":["../src/text-entry-state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAA;AACjF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AAE3G,iBAAS,cAAc,CAAC,IAAI,SAAS,KAAK,EACzC,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,EACzB,QAAQ,EAAE,gBAAgB,GAAG,IAAI,EACjC,WAAW,EAAE,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,CAAC,GACrE,WAAW,CAAC,IAAI,CAAC,CA4BnB;AAED,OAAO,EAAE,cAAc,EAAE,CAAA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { PciId } from "./pci";
|
|
2
|
+
import type { SessionContext, WireIntent } from "./session-context";
|
|
3
|
+
import type { ContentInline } from "./content";
|
|
4
|
+
import type { RendererCorrectAnswer, RendererInteraction, RendererStimulus, RendererSubmission } from "./types";
|
|
5
|
+
declare const ADVANCE_PATH = "/api/v0/advance";
|
|
6
|
+
type WireResult<Pcis extends PciId = PciId> = {
|
|
7
|
+
outcome: "advanced";
|
|
8
|
+
stimulus: RendererStimulus | null;
|
|
9
|
+
interaction: RendererInteraction<Pcis> | null;
|
|
10
|
+
} | {
|
|
11
|
+
outcome: "submitted";
|
|
12
|
+
stimulus: RendererStimulus | null;
|
|
13
|
+
interaction: RendererInteraction<Pcis>;
|
|
14
|
+
submission: RendererSubmission<Pcis>;
|
|
15
|
+
isCorrect: boolean;
|
|
16
|
+
feedbackContent: ContentInline[];
|
|
17
|
+
correctAnswer: RendererCorrectAnswer | null;
|
|
18
|
+
} | {
|
|
19
|
+
outcome: "completed";
|
|
20
|
+
};
|
|
21
|
+
interface WireRequestBody<Pcis extends PciId = PciId> {
|
|
22
|
+
studentId: string;
|
|
23
|
+
supportedPcis: readonly PciId[];
|
|
24
|
+
intent: WireIntent<Pcis>;
|
|
25
|
+
}
|
|
26
|
+
type TransportResult<Pcis extends PciId = PciId> = {
|
|
27
|
+
ok: true;
|
|
28
|
+
data: WireResult<Pcis>;
|
|
29
|
+
} | {
|
|
30
|
+
ok: false;
|
|
31
|
+
error: Error;
|
|
32
|
+
};
|
|
33
|
+
interface TransportConfig<Pcis extends PciId = PciId> {
|
|
34
|
+
readonly publishableKey: string;
|
|
35
|
+
readonly supportedPcis: readonly Pcis[];
|
|
36
|
+
readonly origin?: string;
|
|
37
|
+
readonly fetch?: typeof globalThis.fetch;
|
|
38
|
+
readonly abort?: AbortController;
|
|
39
|
+
readonly log: SessionContext["log"];
|
|
40
|
+
}
|
|
41
|
+
declare function httpSentinel(status: number): Error;
|
|
42
|
+
declare function isAbortError(err: unknown): boolean;
|
|
43
|
+
declare function createTransport<Pcis extends PciId>(tc: TransportConfig<Pcis>): (body: WireRequestBody<Pcis>) => Promise<TransportResult<Pcis>>;
|
|
44
|
+
export { ADVANCE_PATH, createTransport, httpSentinel, isAbortError };
|
|
45
|
+
export type { TransportConfig, TransportResult, WireRequestBody, WireResult };
|
|
46
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,6CAA6C,CAAA;AAC7F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAA;AACxE,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AAEzI,QAAA,MAAM,YAAY,oBAAoB,CAAA;AAEtC,KAAK,UAAU,CAAC,IAAI,SAAS,KAAK,GAAG,KAAK,IACvC;IACA,OAAO,EAAE,UAAU,CAAA;IACnB,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAA;IACjC,WAAW,EAAE,mBAAmB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CAC5C,GACD;IACA,OAAO,EAAE,WAAW,CAAA;IACpB,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAA;IACjC,WAAW,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAA;IACtC,UAAU,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAA;IACpC,SAAS,EAAE,OAAO,CAAA;IAClB,eAAe,EAAE,aAAa,EAAE,CAAA;IAChC,aAAa,EAAE,qBAAqB,GAAG,IAAI,CAAA;CAC1C,GACD;IAAE,OAAO,EAAE,WAAW,CAAA;CAAE,CAAA;AAE3B,UAAU,eAAe,CAAC,IAAI,SAAS,KAAK,GAAG,KAAK;IACnD,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,SAAS,KAAK,EAAE,CAAA;IAC/B,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,CAAA;CACxB;AAED,KAAK,eAAe,CAAC,IAAI,SAAS,KAAK,GAAG,KAAK,IAC5C;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,CAAA;CAAE,GACpC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAA;AAE9B,UAAU,eAAe,CAAC,IAAI,SAAS,KAAK,GAAG,KAAK;IACnD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,aAAa,EAAE,SAAS,IAAI,EAAE,CAAA;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAA;IAChC,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,CAAA;CACnC;AAED,iBAAS,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CA0B3C;AAED,iBAAS,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAQ3C;AAED,iBAAS,eAAe,CAAC,IAAI,SAAS,KAAK,EAAE,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC,UAWtC,eAAe,CAAC,IAAI,CAAC,KAAG,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CA+ErF;AAED,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,CAAA;AACpE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,CAAA"}
|
package/dist/types.d.ts
CHANGED
|
@@ -110,6 +110,7 @@ interface ChoiceState<Pcis extends PciId = PciId> extends NonSerializable {
|
|
|
110
110
|
readonly maxChoices: number;
|
|
111
111
|
readonly minChoices: number;
|
|
112
112
|
submitChoice(selectedKeys: string[]): Promise<PrimerState<Pcis>>;
|
|
113
|
+
timeout(): Promise<PrimerState<Pcis>>;
|
|
113
114
|
}
|
|
114
115
|
interface TextEntryState<Pcis extends PciId = PciId> extends NonSerializable {
|
|
115
116
|
readonly phase: "interaction";
|
|
@@ -119,6 +120,7 @@ interface TextEntryState<Pcis extends PciId = PciId> extends NonSerializable {
|
|
|
119
120
|
type: "text-entry";
|
|
120
121
|
}>;
|
|
121
122
|
submitText(value: string): Promise<PrimerState<Pcis>>;
|
|
123
|
+
timeout(): Promise<PrimerState<Pcis>>;
|
|
122
124
|
}
|
|
123
125
|
interface ExtendedTextSingleState<Pcis extends PciId = PciId> extends NonSerializable {
|
|
124
126
|
readonly phase: "interaction";
|
|
@@ -129,6 +131,7 @@ interface ExtendedTextSingleState<Pcis extends PciId = PciId> extends NonSeriali
|
|
|
129
131
|
type: "extended-text";
|
|
130
132
|
}>;
|
|
131
133
|
submitText(value: string): Promise<PrimerState<Pcis>>;
|
|
134
|
+
timeout(): Promise<PrimerState<Pcis>>;
|
|
132
135
|
}
|
|
133
136
|
interface ExtendedTextMultipleState<Pcis extends PciId = PciId> extends NonSerializable {
|
|
134
137
|
readonly phase: "interaction";
|
|
@@ -141,6 +144,7 @@ interface ExtendedTextMultipleState<Pcis extends PciId = PciId> extends NonSeria
|
|
|
141
144
|
readonly maxStrings: number;
|
|
142
145
|
readonly minStrings: number;
|
|
143
146
|
submitTexts(values: string[]): Promise<PrimerState<Pcis>>;
|
|
147
|
+
timeout(): Promise<PrimerState<Pcis>>;
|
|
144
148
|
}
|
|
145
149
|
type ExtendedTextState<Pcis extends PciId = PciId> = ExtendedTextSingleState<Pcis> | ExtendedTextMultipleState<Pcis>;
|
|
146
150
|
type PciInteractionState<Pcis extends PciId = PciId> = {
|
|
@@ -152,6 +156,7 @@ type PciInteractionState<Pcis extends PciId = PciId> = {
|
|
|
152
156
|
readonly pciId: K;
|
|
153
157
|
readonly properties: PciProps<K>;
|
|
154
158
|
submit(value: PciValue<K>): Promise<PrimerState<Pcis>>;
|
|
159
|
+
timeout(): Promise<PrimerState<Pcis>>;
|
|
155
160
|
};
|
|
156
161
|
}[Pcis];
|
|
157
162
|
type InteractionState<Pcis extends PciId = PciId> = ChoiceState<Pcis> | TextEntryState<Pcis> | ExtendedTextState<Pcis> | PciInteractionState<Pcis>;
|
|
@@ -168,21 +173,24 @@ interface FeedbackState<Pcis extends PciId = PciId> extends NonSerializable {
|
|
|
168
173
|
interface CompletedState extends NonSerializable {
|
|
169
174
|
readonly phase: "completed";
|
|
170
175
|
}
|
|
176
|
+
interface ConsumedState extends NonSerializable {
|
|
177
|
+
readonly phase: "consumed";
|
|
178
|
+
}
|
|
171
179
|
interface ErroredState<Pcis extends PciId = PciId> extends NonSerializable {
|
|
172
180
|
readonly phase: "errored";
|
|
173
181
|
readonly error: Error;
|
|
174
|
-
readonly failedPhase: "observation" | "interaction";
|
|
182
|
+
readonly failedPhase: "observation" | "interaction" | "timeout";
|
|
175
183
|
retry(): Promise<PrimerState<Pcis>>;
|
|
176
184
|
}
|
|
177
185
|
interface FatalState extends NonSerializable {
|
|
178
186
|
readonly phase: "fatal";
|
|
179
187
|
readonly error: Error;
|
|
180
188
|
}
|
|
181
|
-
type PrimerState<Pcis extends PciId = PciId> = ObservationState<Pcis> | InteractionState<Pcis> | FeedbackState<Pcis> | CompletedState | ErroredState<Pcis> | FatalState;
|
|
189
|
+
type PrimerState<Pcis extends PciId = PciId> = ObservationState<Pcis> | InteractionState<Pcis> | FeedbackState<Pcis> | CompletedState | ConsumedState | ErroredState<Pcis> | FatalState;
|
|
182
190
|
interface PciRenderProps<K extends PciId> {
|
|
183
191
|
properties: PciProps<K>;
|
|
184
192
|
submitted: boolean;
|
|
185
193
|
onValueChange: (value: PciValue<K> | null) => void;
|
|
186
194
|
}
|
|
187
|
-
export type { BodyStimulus, ChoiceState, CompletedState, ErroredState, ExtendedTextMultipleState, ExtendedTextSingleState, ExtendedTextState, FatalState, FeedbackState, ImageStimulus, InteractionState, NonSerializable, ObservationState, PciInteraction, PciInteractionState, PciRenderProps, PciSubmission, PrimerState, RendererChoice, RendererCorrectAnswer, RendererCorrectScalarValue, RendererInteraction, RendererStimulus, RendererSubmission, TextEntryState };
|
|
195
|
+
export type { BodyStimulus, ChoiceState, CompletedState, ConsumedState, ErroredState, ExtendedTextMultipleState, ExtendedTextSingleState, ExtendedTextState, FatalState, FeedbackState, ImageStimulus, InteractionState, NonSerializable, ObservationState, PciInteraction, PciInteractionState, PciRenderProps, PciSubmission, PrimerState, RendererChoice, RendererCorrectAnswer, RendererCorrectScalarValue, RendererInteraction, RendererStimulus, RendererSubmission, TextEntryState };
|
|
188
196
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,27 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@superbuilders/primer-tives",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
|
-
"
|
|
7
|
-
"types": "./dist/
|
|
8
|
-
"import": "./dist/
|
|
9
|
-
},
|
|
10
|
-
"./types": {
|
|
11
|
-
"types": "./dist/types.d.ts",
|
|
12
|
-
"import": "./dist/types.js"
|
|
13
|
-
},
|
|
14
|
-
"./content": {
|
|
15
|
-
"types": "./dist/content.d.ts",
|
|
16
|
-
"import": "./dist/content.js"
|
|
17
|
-
},
|
|
18
|
-
"./errors": {
|
|
19
|
-
"types": "./dist/errors.d.ts",
|
|
20
|
-
"import": "./dist/errors.js"
|
|
21
|
-
},
|
|
22
|
-
"./pci": {
|
|
23
|
-
"types": "./dist/pci.d.ts",
|
|
24
|
-
"import": "./dist/pci.js"
|
|
6
|
+
".": {
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"import": "./dist/index.js"
|
|
25
9
|
}
|
|
26
10
|
},
|
|
27
11
|
"files": [
|
package/dist/client.js
DELETED
|
@@ -1,383 +0,0 @@
|
|
|
1
|
-
// src/errors.ts
|
|
2
|
-
import * as errors from "@superbuilders/errors";
|
|
3
|
-
var ErrNetwork = errors.new("network");
|
|
4
|
-
var ErrJsonParse = errors.new("json parse");
|
|
5
|
-
var ErrUnsupportedPci = errors.new("unsupported pci");
|
|
6
|
-
var ErrInvalidPublishableKey = errors.new("invalid publishable key");
|
|
7
|
-
var ErrBadRequest = errors.new("bad request");
|
|
8
|
-
var ErrServerError = errors.new("server error");
|
|
9
|
-
var ErrTimeout = errors.new("timeout");
|
|
10
|
-
var ErrForbidden = errors.new("forbidden");
|
|
11
|
-
var ErrNotFound = errors.new("not found");
|
|
12
|
-
var ErrConflict = errors.new("conflict");
|
|
13
|
-
var ErrRateLimited = errors.new("rate limited");
|
|
14
|
-
var ErrServiceUnavailable = errors.new("service unavailable");
|
|
15
|
-
var ErrNotSerializable = errors.new("PrimerState is live in-memory state and must not be serialized or stored");
|
|
16
|
-
var ErrInvalidSubmission = errors.new("invalid submission");
|
|
17
|
-
var ErrMalformedPublishableKey = errors.new("malformed publishable key");
|
|
18
|
-
// src/client.ts
|
|
19
|
-
import * as errors2 from "@superbuilders/errors";
|
|
20
|
-
var DEFAULT_ORIGIN = "https://sb-primer.vercel.app";
|
|
21
|
-
var ADVANCE_PATH = "/api/v0/advance";
|
|
22
|
-
function poisonToJSON() {
|
|
23
|
-
throw ErrNotSerializable;
|
|
24
|
-
}
|
|
25
|
-
function httpSentinel(status) {
|
|
26
|
-
if (status === 400) {
|
|
27
|
-
return ErrBadRequest;
|
|
28
|
-
}
|
|
29
|
-
if (status === 401) {
|
|
30
|
-
return ErrInvalidPublishableKey;
|
|
31
|
-
}
|
|
32
|
-
if (status === 403) {
|
|
33
|
-
return ErrForbidden;
|
|
34
|
-
}
|
|
35
|
-
if (status === 404) {
|
|
36
|
-
return ErrNotFound;
|
|
37
|
-
}
|
|
38
|
-
if (status === 409) {
|
|
39
|
-
return ErrConflict;
|
|
40
|
-
}
|
|
41
|
-
if (status === 422) {
|
|
42
|
-
return ErrUnsupportedPci;
|
|
43
|
-
}
|
|
44
|
-
if (status === 429) {
|
|
45
|
-
return ErrRateLimited;
|
|
46
|
-
}
|
|
47
|
-
if (status === 502 || status === 503 || status === 504) {
|
|
48
|
-
return ErrServiceUnavailable;
|
|
49
|
-
}
|
|
50
|
-
return ErrServerError;
|
|
51
|
-
}
|
|
52
|
-
function isAbortError(err) {
|
|
53
|
-
if (err instanceof DOMException && err.name === "AbortError") {
|
|
54
|
-
return true;
|
|
55
|
-
}
|
|
56
|
-
if (err instanceof DOMException && err.name === "TimeoutError") {
|
|
57
|
-
return true;
|
|
58
|
-
}
|
|
59
|
-
return false;
|
|
60
|
-
}
|
|
61
|
-
var PK_PREFIX = "pk_";
|
|
62
|
-
function create(config) {
|
|
63
|
-
const configFetch = config.fetch;
|
|
64
|
-
const fetchFn = configFetch ? configFetch : globalThis.fetch;
|
|
65
|
-
const log = config.logger;
|
|
66
|
-
if (!config.publishableKey.startsWith(PK_PREFIX)) {
|
|
67
|
-
log?.error("malformed publishable key", { prefix: PK_PREFIX });
|
|
68
|
-
throw errors2.wrap(ErrMalformedPublishableKey, `key must start with '${PK_PREFIX}'`);
|
|
69
|
-
}
|
|
70
|
-
function transportSignal() {
|
|
71
|
-
if (config.abort) {
|
|
72
|
-
return config.abort.signal;
|
|
73
|
-
}
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
async function transport(body) {
|
|
77
|
-
log?.debug("transport request", {
|
|
78
|
-
studentId: body.studentId,
|
|
79
|
-
intentKind: body.intent.kind
|
|
80
|
-
});
|
|
81
|
-
const url = config.origin ? `${config.origin}${ADVANCE_PATH}` : ADVANCE_PATH;
|
|
82
|
-
const fetchResult = await fetchFn(url, {
|
|
83
|
-
method: "POST",
|
|
84
|
-
headers: {
|
|
85
|
-
"Content-Type": "application/json",
|
|
86
|
-
"X-Primer-Publishable-Key": config.publishableKey
|
|
87
|
-
},
|
|
88
|
-
body: JSON.stringify(body),
|
|
89
|
-
signal: transportSignal()
|
|
90
|
-
}).then(function ok(r) {
|
|
91
|
-
return { ok: true, response: r };
|
|
92
|
-
}, function fail(err) {
|
|
93
|
-
return { ok: false, error: err };
|
|
94
|
-
});
|
|
95
|
-
if (!fetchResult.ok) {
|
|
96
|
-
if (isAbortError(fetchResult.error)) {
|
|
97
|
-
log?.error("transport timeout", {
|
|
98
|
-
studentId: body.studentId,
|
|
99
|
-
intentKind: body.intent.kind
|
|
100
|
-
});
|
|
101
|
-
return { ok: false, error: errors2.wrap(ErrTimeout, fetchResult.error.message) };
|
|
102
|
-
}
|
|
103
|
-
log?.error("transport network error", {
|
|
104
|
-
studentId: body.studentId,
|
|
105
|
-
error: fetchResult.error
|
|
106
|
-
});
|
|
107
|
-
return { ok: false, error: errors2.wrap(ErrNetwork, fetchResult.error.message) };
|
|
108
|
-
}
|
|
109
|
-
const res = fetchResult.response;
|
|
110
|
-
if (!res.ok) {
|
|
111
|
-
const text = await res.text().catch(function fallback() {
|
|
112
|
-
return "";
|
|
113
|
-
});
|
|
114
|
-
const sentinel = httpSentinel(res.status);
|
|
115
|
-
log?.error("transport http error", {
|
|
116
|
-
studentId: body.studentId,
|
|
117
|
-
status: res.status
|
|
118
|
-
});
|
|
119
|
-
return { ok: false, error: errors2.wrap(sentinel, text) };
|
|
120
|
-
}
|
|
121
|
-
const jsonResult = await res.json().then(function ok(data) {
|
|
122
|
-
return { ok: true, data };
|
|
123
|
-
}, function fail(err) {
|
|
124
|
-
return { ok: false, error: err };
|
|
125
|
-
});
|
|
126
|
-
if (!jsonResult.ok) {
|
|
127
|
-
log?.error("transport json parse failed", {
|
|
128
|
-
studentId: body.studentId,
|
|
129
|
-
error: jsonResult.error
|
|
130
|
-
});
|
|
131
|
-
return { ok: false, error: errors2.wrap(ErrJsonParse, jsonResult.error.message) };
|
|
132
|
-
}
|
|
133
|
-
log?.debug("transport success", {
|
|
134
|
-
studentId: body.studentId,
|
|
135
|
-
intentKind: body.intent.kind
|
|
136
|
-
});
|
|
137
|
-
return { ok: true, data: jsonResult.data };
|
|
138
|
-
}
|
|
139
|
-
function makeSession(studentId) {
|
|
140
|
-
function resolve(result) {
|
|
141
|
-
switch (result.outcome) {
|
|
142
|
-
case "advanced":
|
|
143
|
-
return fromAdvanced(result.stimulus, result.interaction);
|
|
144
|
-
case "submitted":
|
|
145
|
-
return feedbackState(result.stimulus, result.interaction, result.submission, result.isCorrect, result.feedbackContent, result.correctAnswer);
|
|
146
|
-
case "completed":
|
|
147
|
-
return { phase: "completed", toJSON: poisonToJSON };
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
function errored(error, failedPhase, intent) {
|
|
151
|
-
return {
|
|
152
|
-
phase: "errored",
|
|
153
|
-
error,
|
|
154
|
-
failedPhase,
|
|
155
|
-
retry: function retry() {
|
|
156
|
-
log?.debug("retrying from errored state", { failedPhase });
|
|
157
|
-
return execute(intent, failedPhase);
|
|
158
|
-
},
|
|
159
|
-
toJSON: poisonToJSON
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
async function execute(intent, phase) {
|
|
163
|
-
const body = {
|
|
164
|
-
studentId,
|
|
165
|
-
supportedPcis: config.supportedPcis,
|
|
166
|
-
intent
|
|
167
|
-
};
|
|
168
|
-
const result = await transport(body);
|
|
169
|
-
if (!result.ok) {
|
|
170
|
-
return errored(result.error, phase, intent);
|
|
171
|
-
}
|
|
172
|
-
return resolve(result.data);
|
|
173
|
-
}
|
|
174
|
-
function isPciSupported(pciId) {
|
|
175
|
-
for (const id of config.supportedPcis) {
|
|
176
|
-
if (id === pciId) {
|
|
177
|
-
return true;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
return false;
|
|
181
|
-
}
|
|
182
|
-
function fromAdvanced(stimulus, interaction) {
|
|
183
|
-
if (interaction === null) {
|
|
184
|
-
return observationState(stimulus);
|
|
185
|
-
}
|
|
186
|
-
if (interaction.type === "portable-custom") {
|
|
187
|
-
if (!isPciSupported(interaction.pciId)) {
|
|
188
|
-
log?.error("unsupported pci in frame", { pciId: interaction.pciId });
|
|
189
|
-
return {
|
|
190
|
-
phase: "fatal",
|
|
191
|
-
error: errors2.wrap(ErrUnsupportedPci, `pci '${interaction.pciId}'`),
|
|
192
|
-
toJSON: poisonToJSON
|
|
193
|
-
};
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
return pendingInteractionState(stimulus, interaction);
|
|
197
|
-
}
|
|
198
|
-
function observationState(stimulus) {
|
|
199
|
-
return {
|
|
200
|
-
phase: "observation",
|
|
201
|
-
stimulus,
|
|
202
|
-
advance: function advance() {
|
|
203
|
-
return execute({ kind: "observation" }, "observation");
|
|
204
|
-
},
|
|
205
|
-
toJSON: poisonToJSON
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
function pendingInteractionState(stimulus, interaction) {
|
|
209
|
-
switch (interaction.type) {
|
|
210
|
-
case "choice":
|
|
211
|
-
return choiceState(stimulus, interaction, interaction.options, interaction.maxChoices, interaction.minChoices);
|
|
212
|
-
case "text-entry":
|
|
213
|
-
return textEntryState(stimulus, interaction);
|
|
214
|
-
case "extended-text":
|
|
215
|
-
return extendedTextState(stimulus, interaction);
|
|
216
|
-
case "portable-custom":
|
|
217
|
-
return pciInteractionState(stimulus, interaction);
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
function findUnknownKey(selectedKeys, options) {
|
|
221
|
-
const optionIds = new Set(options.map(function getId(o) {
|
|
222
|
-
return o.identifier;
|
|
223
|
-
}));
|
|
224
|
-
for (const key of selectedKeys) {
|
|
225
|
-
if (!optionIds.has(key)) {
|
|
226
|
-
return key;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
return null;
|
|
230
|
-
}
|
|
231
|
-
function validateChoiceSubmission(selectedKeys, options, maxChoices, minChoices) {
|
|
232
|
-
if (selectedKeys.length < minChoices) {
|
|
233
|
-
log?.error("choice submit below minChoices", { selectedKeys, minChoices });
|
|
234
|
-
return errors2.wrap(ErrInvalidSubmission, `need at least ${minChoices} selections`);
|
|
235
|
-
}
|
|
236
|
-
if (selectedKeys.length > maxChoices) {
|
|
237
|
-
log?.error("choice submit above maxChoices", { selectedKeys, maxChoices });
|
|
238
|
-
return errors2.wrap(ErrInvalidSubmission, `at most ${maxChoices} selections`);
|
|
239
|
-
}
|
|
240
|
-
const uniqueKeys = new Set(selectedKeys);
|
|
241
|
-
if (uniqueKeys.size !== selectedKeys.length) {
|
|
242
|
-
log?.error("choice submit has duplicates", { selectedKeys });
|
|
243
|
-
return errors2.wrap(ErrInvalidSubmission, "duplicate selections");
|
|
244
|
-
}
|
|
245
|
-
const unknownKey = findUnknownKey(selectedKeys, options);
|
|
246
|
-
if (unknownKey) {
|
|
247
|
-
log?.error("choice submit has unknown key", { key: unknownKey });
|
|
248
|
-
return errors2.wrap(ErrInvalidSubmission, `unknown option '${unknownKey}'`);
|
|
249
|
-
}
|
|
250
|
-
return null;
|
|
251
|
-
}
|
|
252
|
-
function choiceState(stimulus, interaction, options, maxChoices, minChoices) {
|
|
253
|
-
return {
|
|
254
|
-
phase: "interaction",
|
|
255
|
-
kind: "choice",
|
|
256
|
-
stimulus,
|
|
257
|
-
interaction,
|
|
258
|
-
options,
|
|
259
|
-
maxChoices,
|
|
260
|
-
minChoices,
|
|
261
|
-
submitChoice: function submitChoice(selectedKeys) {
|
|
262
|
-
const validationError = validateChoiceSubmission(selectedKeys, options, maxChoices, minChoices);
|
|
263
|
-
if (validationError) {
|
|
264
|
-
return Promise.resolve(errored(validationError, "interaction", {
|
|
265
|
-
kind: "interaction",
|
|
266
|
-
submission: { type: "choice", selectedKeys }
|
|
267
|
-
}));
|
|
268
|
-
}
|
|
269
|
-
return execute({ kind: "interaction", submission: { type: "choice", selectedKeys } }, "interaction");
|
|
270
|
-
},
|
|
271
|
-
toJSON: poisonToJSON
|
|
272
|
-
};
|
|
273
|
-
}
|
|
274
|
-
function textEntryState(stimulus, interaction) {
|
|
275
|
-
return {
|
|
276
|
-
phase: "interaction",
|
|
277
|
-
kind: "text-entry",
|
|
278
|
-
stimulus,
|
|
279
|
-
interaction,
|
|
280
|
-
submitText: function submitText(value) {
|
|
281
|
-
return execute({ kind: "interaction", submission: { type: "text-entry", value } }, "interaction");
|
|
282
|
-
},
|
|
283
|
-
toJSON: poisonToJSON
|
|
284
|
-
};
|
|
285
|
-
}
|
|
286
|
-
function validateExtendedTextSubmission(values, minStrings, maxStrings) {
|
|
287
|
-
if (values.length < minStrings) {
|
|
288
|
-
log?.error("extended-text submit below minStrings", { count: values.length, minStrings });
|
|
289
|
-
return errors2.wrap(ErrInvalidSubmission, `need at least ${minStrings} values`);
|
|
290
|
-
}
|
|
291
|
-
if (values.length > maxStrings) {
|
|
292
|
-
log?.error("extended-text submit above maxStrings", { count: values.length, maxStrings });
|
|
293
|
-
return errors2.wrap(ErrInvalidSubmission, `at most ${maxStrings} values`);
|
|
294
|
-
}
|
|
295
|
-
return null;
|
|
296
|
-
}
|
|
297
|
-
function extendedTextState(stimulus, interaction) {
|
|
298
|
-
const maxStrings = interaction.maxStrings;
|
|
299
|
-
const minStrings = interaction.minStrings;
|
|
300
|
-
if (maxStrings === 1) {
|
|
301
|
-
return {
|
|
302
|
-
phase: "interaction",
|
|
303
|
-
kind: "extended-text",
|
|
304
|
-
cardinality: "single",
|
|
305
|
-
stimulus,
|
|
306
|
-
interaction,
|
|
307
|
-
submitText: function submitText(value) {
|
|
308
|
-
return execute({ kind: "interaction", submission: { type: "extended-text", values: [value] } }, "interaction");
|
|
309
|
-
},
|
|
310
|
-
toJSON: poisonToJSON
|
|
311
|
-
};
|
|
312
|
-
}
|
|
313
|
-
return {
|
|
314
|
-
phase: "interaction",
|
|
315
|
-
kind: "extended-text",
|
|
316
|
-
cardinality: "multiple",
|
|
317
|
-
stimulus,
|
|
318
|
-
interaction,
|
|
319
|
-
maxStrings,
|
|
320
|
-
minStrings,
|
|
321
|
-
submitTexts: function submitTexts(values) {
|
|
322
|
-
const validationError = validateExtendedTextSubmission(values, minStrings, maxStrings);
|
|
323
|
-
if (validationError) {
|
|
324
|
-
return Promise.resolve(errored(validationError, "interaction", {
|
|
325
|
-
kind: "interaction",
|
|
326
|
-
submission: { type: "extended-text", values }
|
|
327
|
-
}));
|
|
328
|
-
}
|
|
329
|
-
return execute({ kind: "interaction", submission: { type: "extended-text", values } }, "interaction");
|
|
330
|
-
},
|
|
331
|
-
toJSON: poisonToJSON
|
|
332
|
-
};
|
|
333
|
-
}
|
|
334
|
-
function pciInteractionState(stimulus, interaction) {
|
|
335
|
-
const { pciId, properties } = interaction;
|
|
336
|
-
function submit(value) {
|
|
337
|
-
log?.debug("pci submit", { pciId });
|
|
338
|
-
const submission = { type: "portable-custom", pciId, value };
|
|
339
|
-
return execute({ kind: "interaction", submission }, "interaction");
|
|
340
|
-
}
|
|
341
|
-
return {
|
|
342
|
-
phase: "interaction",
|
|
343
|
-
kind: "portable-custom",
|
|
344
|
-
stimulus,
|
|
345
|
-
interaction,
|
|
346
|
-
pciId,
|
|
347
|
-
properties,
|
|
348
|
-
submit,
|
|
349
|
-
toJSON: poisonToJSON
|
|
350
|
-
};
|
|
351
|
-
}
|
|
352
|
-
function feedbackState(stimulus, interaction, submission, isCorrect, feedbackContent, correctAnswer) {
|
|
353
|
-
return {
|
|
354
|
-
phase: "feedback",
|
|
355
|
-
stimulus,
|
|
356
|
-
interaction,
|
|
357
|
-
submission,
|
|
358
|
-
isCorrect,
|
|
359
|
-
feedbackContent,
|
|
360
|
-
correctAnswer,
|
|
361
|
-
advance: function advance() {
|
|
362
|
-
return execute({ kind: "observation" }, "observation");
|
|
363
|
-
},
|
|
364
|
-
toJSON: poisonToJSON
|
|
365
|
-
};
|
|
366
|
-
}
|
|
367
|
-
return { execute };
|
|
368
|
-
}
|
|
369
|
-
return {
|
|
370
|
-
async start(studentId) {
|
|
371
|
-
log?.debug("start", { studentId });
|
|
372
|
-
const s = makeSession(studentId);
|
|
373
|
-
return s.execute({ kind: "observation" }, "observation");
|
|
374
|
-
}
|
|
375
|
-
};
|
|
376
|
-
}
|
|
377
|
-
export {
|
|
378
|
-
create,
|
|
379
|
-
DEFAULT_ORIGIN,
|
|
380
|
-
ADVANCE_PATH
|
|
381
|
-
};
|
|
382
|
-
|
|
383
|
-
//# debugId=B2799CD48726B75C64756E2164756E21
|