@superbuilders/primer-tives 2.0.0 → 2.2.1
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 +742 -540
- package/dist/client/create.d.ts +22 -6
- package/dist/client/create.d.ts.map +1 -1
- package/dist/client/index.js +116 -54
- package/dist/client/index.js.map +14 -11
- package/dist/client/session.d.ts +1 -1
- package/dist/client/session.d.ts.map +1 -1
- package/dist/client/transport.d.ts +4 -5
- package/dist/client/transport.d.ts.map +1 -1
- package/dist/contracts/index.d.ts +3 -2
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js +42 -36
- package/dist/contracts/index.js.map +6 -5
- package/dist/contracts/pci-schemas.d.ts +24 -20
- package/dist/contracts/pci-schemas.d.ts.map +1 -1
- package/dist/contracts/pci.d.ts +26 -27
- package/dist/contracts/pci.d.ts.map +1 -1
- package/dist/contracts/validation.d.ts +34 -23
- package/dist/contracts/validation.d.ts.map +1 -1
- package/dist/errors.d.ts +2 -6
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +3 -11
- package/dist/errors.js.map +3 -3
- package/dist/server/create-server.d.ts +4 -33
- package/dist/server/create-server.d.ts.map +1 -1
- package/dist/server/exchange.d.ts +8 -14
- package/dist/server/exchange.d.ts.map +1 -1
- package/dist/server/index.d.ts +1 -3
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +70 -415
- package/dist/server/index.js.map +6 -9
- package/dist/subject-pcis.d.ts +13 -0
- package/dist/subject-pcis.d.ts.map +1 -0
- package/dist/version.d.ts +1 -1
- package/package.json +5 -1
- package/dist/server/hints.d.ts +0 -25
- package/dist/server/hints.d.ts.map +0 -1
- package/dist/server/students.d.ts +0 -12
- package/dist/server/students.d.ts.map +0 -1
package/dist/client/create.d.ts
CHANGED
|
@@ -1,20 +1,36 @@
|
|
|
1
1
|
import type { PrimerLogger } from "../logger";
|
|
2
2
|
import type { PciId } from "../contracts/pci";
|
|
3
|
-
import type { SubjectScope } from "../subject";
|
|
4
3
|
import type { PrimerState } from "./types";
|
|
5
|
-
|
|
4
|
+
import type { SubjectScope } from "../subject";
|
|
5
|
+
import { type RequiredPciForSubject } from "../subject-pcis";
|
|
6
|
+
type SupportedPciForSubject<S extends SubjectScope, Pcis extends PciId> = Pcis | RequiredPciForSubject<S>;
|
|
7
|
+
type ConfigFields<S extends SubjectScope> = {
|
|
6
8
|
readonly accessToken: string;
|
|
7
|
-
readonly
|
|
9
|
+
readonly subject: S;
|
|
8
10
|
readonly origin: string;
|
|
9
|
-
readonly subject: SubjectScope;
|
|
10
11
|
readonly fetch?: typeof globalThis.fetch;
|
|
11
12
|
readonly abort?: AbortController;
|
|
12
13
|
readonly logger: PrimerLogger;
|
|
13
|
-
}
|
|
14
|
+
};
|
|
15
|
+
type PciConfigForSubject<S extends SubjectScope, Pcis extends PciId> = [
|
|
16
|
+
RequiredPciForSubject<S>
|
|
17
|
+
] extends [never] ? {
|
|
18
|
+
readonly supportedPcis?: readonly Pcis[];
|
|
19
|
+
} : {
|
|
20
|
+
readonly supportedPcis: readonly [RequiredPciForSubject<S>, ...Pcis[]];
|
|
21
|
+
};
|
|
22
|
+
type Config<S extends SubjectScope, Pcis extends PciId = never> = ConfigFields<S> & PciConfigForSubject<S, Pcis>;
|
|
23
|
+
type DynamicSubjectConfig<Pcis extends PciId = never> = ConfigFields<SubjectScope> & {
|
|
24
|
+
readonly supportedPcis: readonly [RequiredPciForSubject<"all">, ...Pcis[]];
|
|
25
|
+
};
|
|
14
26
|
interface Client<Pcis extends PciId = PciId> {
|
|
15
27
|
start(): Promise<PrimerState<Pcis>>;
|
|
16
28
|
}
|
|
17
|
-
|
|
29
|
+
type SubjectWithoutRequiredPcis = Exclude<SubjectScope, "all" | "math">;
|
|
30
|
+
declare function create<const Pcis extends PciId = never>(config: Config<"math", Pcis>): Client<SupportedPciForSubject<"math", Pcis>>;
|
|
31
|
+
declare function create<const Pcis extends PciId = never>(config: Config<"all", Pcis>): Client<SupportedPciForSubject<"all", Pcis>>;
|
|
32
|
+
declare function create<const S extends SubjectWithoutRequiredPcis, const Pcis extends PciId = never>(config: Config<S, Pcis>): Client<SupportedPciForSubject<S, Pcis>>;
|
|
33
|
+
declare function create<const Pcis extends PciId = never>(config: DynamicSubjectConfig<Pcis>): Client<SupportedPciForSubject<"all", Pcis>>;
|
|
18
34
|
export { create };
|
|
19
35
|
export type { Client, Config };
|
|
20
36
|
//# sourceMappingURL=create.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/client/create.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2CAA2C,CAAA;AACtE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/client/create.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2CAA2C,CAAA;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAA;AAG3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAA;AACvE,OAAO,EAEN,KAAK,qBAAqB,EAC1B,MAAM,0CAA0C,CAAA;AAIjD,KAAK,sBAAsB,CAAC,CAAC,SAAS,YAAY,EAAE,IAAI,SAAS,KAAK,IACnE,IAAI,GACJ,qBAAqB,CAAC,CAAC,CAAC,CAAA;AAE3B,KAAK,YAAY,CAAC,CAAC,SAAS,YAAY,IAAI;IAC3C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAA;IAChC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;CAC7B,CAAA;AAED,KAAK,mBAAmB,CAAC,CAAC,SAAS,YAAY,EAAE,IAAI,SAAS,KAAK,IAAI;IACtE,qBAAqB,CAAC,CAAC,CAAC;CACxB,SAAS,CAAC,KAAK,CAAC,GACd;IAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,IAAI,EAAE,CAAA;CAAE,GAC5C;IAAE,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;CAAE,CAAA;AAE7E,KAAK,MAAM,CAAC,CAAC,SAAS,YAAY,EAAE,IAAI,SAAS,KAAK,GAAG,KAAK,IAAI,YAAY,CAAC,CAAC,CAAC,GAChF,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;AAE7B,KAAK,oBAAoB,CAAC,IAAI,SAAS,KAAK,GAAG,KAAK,IAAI,YAAY,CAAC,YAAY,CAAC,GAAG;IACpF,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;CAC1E,CAAA;AAMD,UAAU,MAAM,CAAC,IAAI,SAAS,KAAK,GAAG,KAAK;IAC1C,KAAK,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA;CACnC;AAED,KAAK,0BAA0B,GAAG,OAAO,CAAC,YAAY,EAAE,KAAK,GAAG,MAAM,CAAC,CAAA;AAUvE,iBAAS,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS,KAAK,GAAG,KAAK,EAC/C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAC1B,MAAM,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAA;AAC/C,iBAAS,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS,KAAK,GAAG,KAAK,EAC/C,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GACzB,MAAM,CAAC,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;AAC9C,iBAAS,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,0BAA0B,EAAE,KAAK,CAAC,IAAI,SAAS,KAAK,GAAG,KAAK,EAC3F,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,GACrB,MAAM,CAAC,sBAAsB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;AAC1C,iBAAS,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS,KAAK,GAAG,KAAK,EAC/C,MAAM,EAAE,oBAAoB,CAAC,IAAI,CAAC,GAChC,MAAM,CAAC,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;AAuD9C,OAAO,EAAE,MAAM,EAAE,CAAA;AACjB,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA"}
|
package/dist/client/index.js
CHANGED
|
@@ -3,6 +3,7 @@ import * as errors from "@superbuilders/errors";
|
|
|
3
3
|
var ErrNetwork = errors.new("network");
|
|
4
4
|
var ErrJsonParse = errors.new("json parse");
|
|
5
5
|
var ErrUnsupportedPci = errors.new("unsupported pci");
|
|
6
|
+
var ErrMissingRequiredPci = errors.new("missing required pci");
|
|
6
7
|
var ErrInvalidAccessToken = errors.new("invalid access token");
|
|
7
8
|
var ErrMalformedAccessToken = errors.new("malformed access token");
|
|
8
9
|
var ErrTokenExpired = errors.new("access token expired");
|
|
@@ -12,16 +13,11 @@ var ErrTimeout = errors.new("timeout");
|
|
|
12
13
|
var ErrForbidden = errors.new("forbidden");
|
|
13
14
|
var ErrNotFound = errors.new("not found");
|
|
14
15
|
var ErrConflict = errors.new("conflict");
|
|
15
|
-
var ErrExternalAuthorityRequired = errors.new("external authority required");
|
|
16
16
|
var ErrRateLimited = errors.new("rate limited");
|
|
17
17
|
var ErrServiceUnavailable = errors.new("service unavailable");
|
|
18
18
|
var ErrNotSerializable = errors.new("PrimerState is live in-memory state and must not be serialized or stored");
|
|
19
19
|
var ErrInvalidSubmission = errors.new("invalid submission");
|
|
20
20
|
var ErrInvalidSecretKey = errors.new("invalid secret key");
|
|
21
|
-
var ErrStudentNotFound = errors.new("student not found");
|
|
22
|
-
var ErrUnsupportedGrade = errors.new("unsupported grade");
|
|
23
|
-
var ErrTimebackUnavailable = errors.new("timeback unavailable");
|
|
24
|
-
var ErrNeedsHints = errors.new("student needs hints set before /advance");
|
|
25
21
|
var ErrSdkUpgradeRequired = errors.new("sdk upgrade required");
|
|
26
22
|
// src/contracts/content.ts
|
|
27
23
|
function inlinesToPlainText(nodes) {
|
|
@@ -47,31 +43,44 @@ function blocksToPlainText(blocks) {
|
|
|
47
43
|
}).join(`
|
|
48
44
|
`);
|
|
49
45
|
}
|
|
46
|
+
// src/contracts/pci.ts
|
|
47
|
+
var PCI_IDS = ["urn:primer:pci:fraction-input"];
|
|
48
|
+
function isPciId(value) {
|
|
49
|
+
for (const id of PCI_IDS) {
|
|
50
|
+
if (id === value) {
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
50
56
|
// src/contracts/validation.ts
|
|
51
57
|
import { z as z2 } from "zod";
|
|
52
58
|
|
|
53
59
|
// src/contracts/pci-schemas.ts
|
|
54
60
|
import { z } from "zod";
|
|
55
|
-
var
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
});
|
|
59
|
-
var DivisionRemainderSubmissionSchema = z.object({
|
|
60
|
-
quotient: z.string(),
|
|
61
|
-
remainder: z.string()
|
|
62
|
-
});
|
|
63
|
-
var FractionOperandSchema = z.object({
|
|
64
|
-
numerator: z.number(),
|
|
65
|
-
denominator: z.number()
|
|
66
|
-
});
|
|
67
|
-
var FractionAdditionPropsSchema = z.object({
|
|
68
|
-
left: FractionOperandSchema,
|
|
69
|
-
right: FractionOperandSchema
|
|
70
|
-
});
|
|
71
|
-
var FractionAdditionSubmissionSchema = z.object({
|
|
72
|
-
numerator: z.string(),
|
|
73
|
-
denominator: z.string()
|
|
61
|
+
var FractionInputPropsSchema = z.object({
|
|
62
|
+
form: z.enum(["whole", "proper", "improper", "mixed"]),
|
|
63
|
+
requireSimplified: z.boolean()
|
|
74
64
|
});
|
|
65
|
+
var FractionInputSubmissionSchema = z.discriminatedUnion("form", [
|
|
66
|
+
z.object({ form: z.literal("whole"), whole: z.string() }),
|
|
67
|
+
z.object({
|
|
68
|
+
form: z.literal("proper"),
|
|
69
|
+
numerator: z.string(),
|
|
70
|
+
denominator: z.string()
|
|
71
|
+
}),
|
|
72
|
+
z.object({
|
|
73
|
+
form: z.literal("improper"),
|
|
74
|
+
numerator: z.string(),
|
|
75
|
+
denominator: z.string()
|
|
76
|
+
}),
|
|
77
|
+
z.object({
|
|
78
|
+
form: z.literal("mixed"),
|
|
79
|
+
whole: z.string(),
|
|
80
|
+
numerator: z.string(),
|
|
81
|
+
denominator: z.string()
|
|
82
|
+
})
|
|
83
|
+
]);
|
|
75
84
|
|
|
76
85
|
// src/contracts/validation.ts
|
|
77
86
|
var MatchPairSchema = z2.object({
|
|
@@ -98,15 +107,10 @@ var MatchSubmissionSchema = z2.object({
|
|
|
98
107
|
type: z2.literal("match"),
|
|
99
108
|
pairs: z2.array(MatchPairSchema)
|
|
100
109
|
});
|
|
101
|
-
var
|
|
102
|
-
type: z2.literal("portable-custom"),
|
|
103
|
-
pciId: z2.literal("urn:primer:pci:division-remainder"),
|
|
104
|
-
value: DivisionRemainderSubmissionSchema
|
|
105
|
-
});
|
|
106
|
-
var FractionAdditionPciSubmissionSchema = z2.object({
|
|
110
|
+
var FractionInputPciSubmissionSchema = z2.object({
|
|
107
111
|
type: z2.literal("portable-custom"),
|
|
108
|
-
pciId: z2.literal("urn:primer:pci:fraction-
|
|
109
|
-
value:
|
|
112
|
+
pciId: z2.literal("urn:primer:pci:fraction-input"),
|
|
113
|
+
value: FractionInputSubmissionSchema
|
|
110
114
|
});
|
|
111
115
|
var RendererSubmissionSchema = z2.union([
|
|
112
116
|
ChoiceSubmissionSchema,
|
|
@@ -114,8 +118,7 @@ var RendererSubmissionSchema = z2.union([
|
|
|
114
118
|
ExtendedTextSubmissionSchema,
|
|
115
119
|
OrderSubmissionSchema,
|
|
116
120
|
MatchSubmissionSchema,
|
|
117
|
-
|
|
118
|
-
FractionAdditionPciSubmissionSchema
|
|
121
|
+
FractionInputPciSubmissionSchema
|
|
119
122
|
]);
|
|
120
123
|
function duplicates(values, keyOf) {
|
|
121
124
|
const seen = new Set;
|
|
@@ -167,10 +170,8 @@ function validateUsageBounds(choices, counts, side) {
|
|
|
167
170
|
}
|
|
168
171
|
function pciSubmissionSchema(pciId) {
|
|
169
172
|
switch (pciId) {
|
|
170
|
-
case "urn:primer:pci:
|
|
171
|
-
return
|
|
172
|
-
case "urn:primer:pci:fraction-addition":
|
|
173
|
-
return FractionAdditionSubmissionSchema;
|
|
173
|
+
case "urn:primer:pci:fraction-input":
|
|
174
|
+
return FractionInputSubmissionSchema;
|
|
174
175
|
}
|
|
175
176
|
const exhaustiveCheck = pciId;
|
|
176
177
|
return exhaustiveCheck;
|
|
@@ -332,6 +333,8 @@ function validateSubmissionForInteraction(interaction, submission) {
|
|
|
332
333
|
function submissionValidationMessage(result) {
|
|
333
334
|
return result.issues.join("; ");
|
|
334
335
|
}
|
|
336
|
+
// src/subject.ts
|
|
337
|
+
var SUBJECTS = ["math", "vocabulary", "science"];
|
|
335
338
|
// src/client/create.ts
|
|
336
339
|
import * as errors10 from "@superbuilders/errors";
|
|
337
340
|
|
|
@@ -339,7 +342,7 @@ import * as errors10 from "@superbuilders/errors";
|
|
|
339
342
|
import * as errors2 from "@superbuilders/errors";
|
|
340
343
|
|
|
341
344
|
// src/version.ts
|
|
342
|
-
var SDK_VERSION = "2.
|
|
345
|
+
var SDK_VERSION = "2.2.1";
|
|
343
346
|
var NPM_PACKAGE_URL = "https://www.npmjs.com/package/@superbuilders/primer-tives";
|
|
344
347
|
|
|
345
348
|
// src/client/transport.ts
|
|
@@ -415,9 +418,6 @@ function httpSentinel(status, body) {
|
|
|
415
418
|
if (status === 409) {
|
|
416
419
|
return ErrConflict;
|
|
417
420
|
}
|
|
418
|
-
if (status === 412) {
|
|
419
|
-
return ErrNeedsHints;
|
|
420
|
-
}
|
|
421
421
|
if (status === 429) {
|
|
422
422
|
return ErrRateLimited;
|
|
423
423
|
}
|
|
@@ -504,12 +504,15 @@ function createTransport(tc) {
|
|
|
504
504
|
const text = await res.text().catch(function fallback() {
|
|
505
505
|
return "";
|
|
506
506
|
});
|
|
507
|
-
const sentinel =
|
|
507
|
+
const sentinel = httpSentinel(res.status, text);
|
|
508
508
|
if (errors2.is(sentinel, ErrSdkUpgradeRequired)) {
|
|
509
509
|
return { ok: false, error: buildSdkUpgradeRequiredError(sentinel, text, logger) };
|
|
510
510
|
}
|
|
511
511
|
logger.error("transport http error", {
|
|
512
|
-
status: res.status
|
|
512
|
+
status: res.status,
|
|
513
|
+
body: text,
|
|
514
|
+
intentKind: body.intent.kind,
|
|
515
|
+
subject: body.subject
|
|
513
516
|
});
|
|
514
517
|
return { ok: false, error: errors2.wrap(sentinel, text) };
|
|
515
518
|
}
|
|
@@ -984,7 +987,6 @@ var FATAL_SENTINELS = [
|
|
|
984
987
|
ErrTokenExpired,
|
|
985
988
|
ErrForbidden,
|
|
986
989
|
ErrNotFound,
|
|
987
|
-
ErrNeedsHints,
|
|
988
990
|
ErrSdkUpgradeRequired,
|
|
989
991
|
ErrUnsupportedPci
|
|
990
992
|
];
|
|
@@ -1046,20 +1048,40 @@ function makeSession(sc) {
|
|
|
1046
1048
|
return state;
|
|
1047
1049
|
}
|
|
1048
1050
|
async function execute(intent, phase) {
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
intent,
|
|
1051
|
+
logger.debug("session execute", {
|
|
1052
|
+
phase,
|
|
1053
|
+
intentKind: intent.kind,
|
|
1052
1054
|
subject: sc.subject
|
|
1055
|
+
});
|
|
1056
|
+
const body = {
|
|
1057
|
+
subject: sc.subject,
|
|
1058
|
+
intent
|
|
1053
1059
|
};
|
|
1054
1060
|
const result = await sc.transport(body);
|
|
1055
1061
|
if (!result.ok) {
|
|
1056
1062
|
if (isFatalError(result.error)) {
|
|
1057
|
-
logger.error("fatal transport error", {
|
|
1063
|
+
logger.error("fatal transport error", {
|
|
1064
|
+
error: result.error,
|
|
1065
|
+
phase,
|
|
1066
|
+
intentKind: intent.kind
|
|
1067
|
+
});
|
|
1058
1068
|
return { phase: "fatal", error: result.error, retriable: false, toJSON: poisonToJSON };
|
|
1059
1069
|
}
|
|
1070
|
+
logger.warn("retriable transport error", {
|
|
1071
|
+
error: result.error,
|
|
1072
|
+
phase,
|
|
1073
|
+
intentKind: intent.kind
|
|
1074
|
+
});
|
|
1060
1075
|
return errored(result.error, phase, intent);
|
|
1061
1076
|
}
|
|
1062
|
-
|
|
1077
|
+
const next = resolve(result.data);
|
|
1078
|
+
logger.debug("session execute resolved", {
|
|
1079
|
+
phase,
|
|
1080
|
+
intentKind: intent.kind,
|
|
1081
|
+
outcome: result.data.outcome,
|
|
1082
|
+
nextPhase: next.phase
|
|
1083
|
+
});
|
|
1084
|
+
return next;
|
|
1063
1085
|
}
|
|
1064
1086
|
function isPciSupported(pciId) {
|
|
1065
1087
|
for (const id of sc.supportedPcis) {
|
|
@@ -1106,6 +1128,37 @@ function makeSession(sc) {
|
|
|
1106
1128
|
return { execute };
|
|
1107
1129
|
}
|
|
1108
1130
|
|
|
1131
|
+
// src/subject-pcis.ts
|
|
1132
|
+
var REQUIRED_PCIS_BY_SUBJECT = {
|
|
1133
|
+
math: ["urn:primer:pci:fraction-input"],
|
|
1134
|
+
vocabulary: [],
|
|
1135
|
+
science: []
|
|
1136
|
+
};
|
|
1137
|
+
function requiredPcisForSubject(subject) {
|
|
1138
|
+
if (subject === "all") {
|
|
1139
|
+
const all = [];
|
|
1140
|
+
for (const s of SUBJECTS) {
|
|
1141
|
+
for (const pci of REQUIRED_PCIS_BY_SUBJECT[s]) {
|
|
1142
|
+
if (!all.includes(pci)) {
|
|
1143
|
+
all.push(pci);
|
|
1144
|
+
}
|
|
1145
|
+
}
|
|
1146
|
+
}
|
|
1147
|
+
return all;
|
|
1148
|
+
}
|
|
1149
|
+
return REQUIRED_PCIS_BY_SUBJECT[subject];
|
|
1150
|
+
}
|
|
1151
|
+
function missingPcisForSubject(subject, provided) {
|
|
1152
|
+
const required = requiredPcisForSubject(subject);
|
|
1153
|
+
const missing = [];
|
|
1154
|
+
for (const pci of required) {
|
|
1155
|
+
if (provided === undefined || !provided.includes(pci)) {
|
|
1156
|
+
missing.push(pci);
|
|
1157
|
+
}
|
|
1158
|
+
}
|
|
1159
|
+
return missing;
|
|
1160
|
+
}
|
|
1161
|
+
|
|
1109
1162
|
// src/client/create.ts
|
|
1110
1163
|
var ACCESS_TOKEN_PREFIX = "eyJ";
|
|
1111
1164
|
function isMalformedJws(token) {
|
|
@@ -1117,13 +1170,22 @@ function isMalformedJws(token) {
|
|
|
1117
1170
|
}
|
|
1118
1171
|
function create(config) {
|
|
1119
1172
|
const logger = config.logger;
|
|
1173
|
+
let supportedPcis = [];
|
|
1174
|
+
if (config.supportedPcis !== undefined) {
|
|
1175
|
+
supportedPcis = config.supportedPcis;
|
|
1176
|
+
}
|
|
1177
|
+
const missingPcis = missingPcisForSubject(config.subject, supportedPcis);
|
|
1178
|
+
if (missingPcis.length > 0) {
|
|
1179
|
+
logger.error("renderer missing required pcis", { subject: config.subject, missingPcis });
|
|
1180
|
+
throw errors10.wrap(ErrMissingRequiredPci, `subject '${config.subject}'`);
|
|
1181
|
+
}
|
|
1120
1182
|
if (isMalformedJws(config.accessToken)) {
|
|
1121
1183
|
logger.error("malformed access token", { prefix: ACCESS_TOKEN_PREFIX });
|
|
1122
1184
|
throw errors10.wrap(ErrMalformedAccessToken, `token must start with '${ACCESS_TOKEN_PREFIX}' and contain two dots`);
|
|
1123
1185
|
}
|
|
1124
1186
|
const transport = createTransport({
|
|
1125
1187
|
accessToken: config.accessToken,
|
|
1126
|
-
|
|
1188
|
+
subject: config.subject,
|
|
1127
1189
|
origin: config.origin,
|
|
1128
1190
|
fetch: config.fetch,
|
|
1129
1191
|
abort: config.abort,
|
|
@@ -1131,10 +1193,10 @@ function create(config) {
|
|
|
1131
1193
|
});
|
|
1132
1194
|
let startPromise;
|
|
1133
1195
|
async function doStart() {
|
|
1134
|
-
logger.debug("start"
|
|
1196
|
+
logger.debug("start");
|
|
1135
1197
|
const s = makeSession({
|
|
1136
|
-
supportedPcis: config.supportedPcis,
|
|
1137
1198
|
subject: config.subject,
|
|
1199
|
+
supportedPcis,
|
|
1138
1200
|
logger,
|
|
1139
1201
|
transport
|
|
1140
1202
|
});
|
|
@@ -1155,4 +1217,4 @@ export {
|
|
|
1155
1217
|
create
|
|
1156
1218
|
};
|
|
1157
1219
|
|
|
1158
|
-
//# debugId=
|
|
1220
|
+
//# debugId=859C0D980BD7BD1D64756E2164756E21
|