@superbuilders/primer-tives 0.6.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +281 -629
- package/dist/client/choice-state.d.ts.map +1 -0
- package/dist/client/consumed.d.ts.map +1 -0
- package/dist/client/content.d.ts.map +1 -0
- package/dist/{client.d.ts → client/create.d.ts} +4 -4
- package/dist/client/create.d.ts.map +1 -0
- package/dist/client/extended-text-state.d.ts.map +1 -0
- package/dist/client/feedback-state.d.ts.map +1 -0
- package/dist/{index.d.ts → client/index.d.ts} +7 -7
- package/dist/{index.d.ts.map → client/index.d.ts.map} +1 -1
- package/dist/{index.js → client/index.js} +50 -24
- package/dist/client/index.js.map +24 -0
- package/dist/client/match-state.d.ts.map +1 -0
- package/dist/client/observation-state.d.ts.map +1 -0
- package/dist/client/order-state.d.ts.map +1 -0
- package/dist/client/pci-state.d.ts.map +1 -0
- package/dist/client/pci.d.ts.map +1 -0
- package/dist/{session-context.d.ts → client/session-context.d.ts} +4 -7
- package/dist/client/session-context.d.ts.map +1 -0
- package/dist/{session.d.ts → client/session.d.ts} +3 -2
- package/dist/client/session.d.ts.map +1 -0
- package/dist/client/text-entry-state.d.ts.map +1 -0
- package/dist/{transport.d.ts → client/transport.d.ts} +3 -3
- package/dist/client/transport.d.ts.map +1 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/errors.d.ts +5 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/grade-level.d.ts +5 -0
- package/dist/grade-level.d.ts.map +1 -0
- package/dist/logger.d.ts +8 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/server/create-server.d.ts +42 -0
- package/dist/server/create-server.d.ts.map +1 -0
- package/dist/server/exchange.d.ts +17 -0
- package/dist/server/exchange.d.ts.map +1 -0
- package/dist/server/index.d.ts +8 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +259 -0
- package/dist/server/index.js.map +14 -0
- package/dist/server/students.d.ts +14 -0
- package/dist/server/students.d.ts.map +1 -0
- package/dist/subject.d.ts +1 -1
- package/dist/subject.d.ts.map +1 -1
- package/package.json +8 -4
- package/dist/choice-state.d.ts.map +0 -1
- package/dist/client.d.ts.map +0 -1
- package/dist/consumed.d.ts.map +0 -1
- package/dist/content.d.ts.map +0 -1
- package/dist/extended-text-state.d.ts.map +0 -1
- package/dist/feedback-state.d.ts.map +0 -1
- package/dist/index.js.map +0 -24
- package/dist/match-state.d.ts.map +0 -1
- package/dist/observation-state.d.ts.map +0 -1
- package/dist/order-state.d.ts.map +0 -1
- package/dist/pci-state.d.ts.map +0 -1
- package/dist/pci.d.ts.map +0 -1
- package/dist/session-context.d.ts.map +0 -1
- package/dist/session.d.ts.map +0 -1
- package/dist/text-entry-state.d.ts.map +0 -1
- package/dist/transport.d.ts.map +0 -1
- package/dist/types.d.ts.map +0 -1
- /package/dist/{choice-state.d.ts → client/choice-state.d.ts} +0 -0
- /package/dist/{consumed.d.ts → client/consumed.d.ts} +0 -0
- /package/dist/{content.d.ts → client/content.d.ts} +0 -0
- /package/dist/{extended-text-state.d.ts → client/extended-text-state.d.ts} +0 -0
- /package/dist/{feedback-state.d.ts → client/feedback-state.d.ts} +0 -0
- /package/dist/{match-state.d.ts → client/match-state.d.ts} +0 -0
- /package/dist/{observation-state.d.ts → client/observation-state.d.ts} +0 -0
- /package/dist/{order-state.d.ts → client/order-state.d.ts} +0 -0
- /package/dist/{pci-state.d.ts → client/pci-state.d.ts} +0 -0
- /package/dist/{pci.d.ts → client/pci.d.ts} +0 -0
- /package/dist/{text-entry-state.d.ts → client/text-entry-state.d.ts} +0 -0
- /package/dist/{types.d.ts → client/types.d.ts} +0 -0
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,UAAU,OAAwB,CAAA;AACxC,QAAA,MAAM,YAAY,OAA2B,CAAA;AAC7C,QAAA,MAAM,iBAAiB,OAAgC,CAAA;AACvD,QAAA,MAAM,qBAAqB,OAAqC,CAAA;AAChE,QAAA,MAAM,uBAAuB,OAAuC,CAAA;AACpE,QAAA,MAAM,eAAe,OAAqC,CAAA;AAC1D,QAAA,MAAM,aAAa,OAA4B,CAAA;AAC/C,QAAA,MAAM,cAAc,OAA6B,CAAA;AACjD,QAAA,MAAM,UAAU,OAAwB,CAAA;AACxC,QAAA,MAAM,YAAY,OAA0B,CAAA;AAC5C,QAAA,MAAM,WAAW,OAA0B,CAAA;AAC3C,QAAA,MAAM,WAAW,OAAyB,CAAA;AAC1C,QAAA,MAAM,cAAc,OAA6B,CAAA;AACjD,QAAA,MAAM,qBAAqB,OAAoC,CAAA;AAC/D,QAAA,MAAM,kBAAkB,OAEvB,CAAA;AACD,QAAA,MAAM,oBAAoB,OAAmC,CAAA;AAE7D,OAAO,EACN,aAAa,EACb,WAAW,EACX,YAAY,EACZ,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,EACZ,uBAAuB,EACvB,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,CAAA"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,UAAU,OAAwB,CAAA;AACxC,QAAA,MAAM,YAAY,OAA2B,CAAA;AAC7C,QAAA,MAAM,iBAAiB,OAAgC,CAAA;AACvD,QAAA,MAAM,qBAAqB,OAAqC,CAAA;AAChE,QAAA,MAAM,uBAAuB,OAAuC,CAAA;AACpE,QAAA,MAAM,eAAe,OAAqC,CAAA;AAC1D,QAAA,MAAM,aAAa,OAA4B,CAAA;AAC/C,QAAA,MAAM,cAAc,OAA6B,CAAA;AACjD,QAAA,MAAM,UAAU,OAAwB,CAAA;AACxC,QAAA,MAAM,YAAY,OAA0B,CAAA;AAC5C,QAAA,MAAM,WAAW,OAA0B,CAAA;AAC3C,QAAA,MAAM,WAAW,OAAyB,CAAA;AAC1C,QAAA,MAAM,cAAc,OAA6B,CAAA;AACjD,QAAA,MAAM,qBAAqB,OAAoC,CAAA;AAC/D,QAAA,MAAM,kBAAkB,OAEvB,CAAA;AACD,QAAA,MAAM,oBAAoB,OAAmC,CAAA;AAE7D,QAAA,MAAM,mBAAmB,OAAmC,CAAA;AAC5D,QAAA,MAAM,kBAAkB,OAAkC,CAAA;AAC1D,QAAA,MAAM,mBAAmB,OAAkC,CAAA;AAC3D,QAAA,MAAM,sBAAsB,OAAqC,CAAA;AAEjE,OAAO,EACN,aAAa,EACb,WAAW,EACX,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,EACZ,uBAAuB,EACvB,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,UAAU,EACV,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grade-level.d.ts","sourceRoot":"","sources":["../src/grade-level.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,YAAY,+EAAgF,CAAA;AAElG,KAAK,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AAE/C,OAAO,EAAE,YAAY,EAAE,CAAA;AACvB,YAAY,EAAE,UAAU,EAAE,CAAA"}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface PrimerLogger {
|
|
2
|
+
debug(message: string, attributes?: Record<string, unknown>): void;
|
|
3
|
+
info(message: string, attributes?: Record<string, unknown>): void;
|
|
4
|
+
warn(message: string, attributes?: Record<string, unknown>): void;
|
|
5
|
+
error(message: string, attributes?: Record<string, unknown>): void;
|
|
6
|
+
}
|
|
7
|
+
export type { PrimerLogger };
|
|
8
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,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,YAAY,EAAE,YAAY,EAAE,CAAA"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { GradeLevel } from "../grade-level";
|
|
2
|
+
import type { PrimerLogger } from "../logger";
|
|
3
|
+
import { type SessionToken } from "./exchange";
|
|
4
|
+
interface PrimerServerConfig {
|
|
5
|
+
readonly origin: string;
|
|
6
|
+
readonly secretKey: string;
|
|
7
|
+
readonly fetch?: typeof globalThis.fetch;
|
|
8
|
+
readonly abort?: AbortController;
|
|
9
|
+
readonly logger?: PrimerLogger;
|
|
10
|
+
}
|
|
11
|
+
interface PrimerServer {
|
|
12
|
+
/**
|
|
13
|
+
* Native only: provision a new Primer-owned student. Returns a stable
|
|
14
|
+
* studentId string you persist in your own DB keyed by your user. Pair
|
|
15
|
+
* this value with `exchangeNativeStudentForAccessToken` on every
|
|
16
|
+
* session start. Timeback integrations do NOT call this — they
|
|
17
|
+
* provision automatically on exchange.
|
|
18
|
+
*/
|
|
19
|
+
createNativeStudent(gradeLevel: GradeLevel): Promise<string>;
|
|
20
|
+
/**
|
|
21
|
+
* Native only: update an existing Primer student's grade level. For
|
|
22
|
+
* Timeback, grade changes flow from the SIS — do not call this.
|
|
23
|
+
*/
|
|
24
|
+
updateNativeStudentGradeLevel(studentId: string, gradeLevel: GradeLevel): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Native only: exchange a Primer-minted studentId for a short-lived
|
|
27
|
+
* access token. Pass `accessToken` from the returned `SessionToken` to
|
|
28
|
+
* `create()` on the browser SDK.
|
|
29
|
+
*/
|
|
30
|
+
exchangeNativeStudentForAccessToken(studentId: string): Promise<SessionToken>;
|
|
31
|
+
/**
|
|
32
|
+
* Timeback only: exchange a OneRoster sourcedId for a short-lived
|
|
33
|
+
* access token. The underlying Primer student is auto-provisioned on
|
|
34
|
+
* first exchange. Pass `accessToken` from the returned `SessionToken`
|
|
35
|
+
* to `create()` on the browser SDK.
|
|
36
|
+
*/
|
|
37
|
+
exchangeTimebackStudentForAccessToken(sourcedId: string): Promise<SessionToken>;
|
|
38
|
+
}
|
|
39
|
+
declare function createPrimerServer(config: PrimerServerConfig): PrimerServer;
|
|
40
|
+
export type { PrimerServer, PrimerServerConfig };
|
|
41
|
+
export { createPrimerServer };
|
|
42
|
+
//# sourceMappingURL=create-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-server.d.ts","sourceRoot":"","sources":["../../src/server/create-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAA;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAAE,KAAK,YAAY,EAAiB,MAAM,6CAA6C,CAAA;AAG9F,UAAU,kBAAkB;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAA;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAA;CAC9B;AAED,UAAU,YAAY;IACrB;;;;;;OAMG;IACH,mBAAmB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAE5D;;;OAGG;IACH,6BAA6B,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEvF;;;;OAIG;IACH,mCAAmC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IAE7E;;;;;OAKG;IACH,qCAAqC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;CAC/E;AAED,iBAAS,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,YAAY,CAepE;AAED,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,CAAA;AAChD,OAAO,EAAE,kBAAkB,EAAE,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { PrimerLogger } from "../logger";
|
|
2
|
+
type Provider = "native" | "timeback";
|
|
3
|
+
interface ExchangeConfig {
|
|
4
|
+
readonly origin: string;
|
|
5
|
+
readonly secretKey: string;
|
|
6
|
+
readonly fetch?: typeof globalThis.fetch;
|
|
7
|
+
readonly abort?: AbortController;
|
|
8
|
+
readonly logger?: PrimerLogger;
|
|
9
|
+
}
|
|
10
|
+
interface SessionToken {
|
|
11
|
+
readonly accessToken: string;
|
|
12
|
+
readonly expiresInSeconds: number;
|
|
13
|
+
}
|
|
14
|
+
declare function exchangeToken(config: ExchangeConfig, provider: Provider, studentId: string): Promise<SessionToken>;
|
|
15
|
+
export type { ExchangeConfig, SessionToken };
|
|
16
|
+
export { exchangeToken };
|
|
17
|
+
//# sourceMappingURL=exchange.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exchange.d.ts","sourceRoot":"","sources":["../../src/server/exchange.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AAItE,KAAK,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAA;AAErC,UAAU,cAAc;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAA;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAA;CAC9B;AAED,UAAU,YAAY;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;CACjC;AAgED,iBAAe,aAAa,CAC3B,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,YAAY,CAAC,CAoEvB;AAED,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { createPrimerServer } from "./create-server";
|
|
2
|
+
export type { PrimerServer, PrimerServerConfig } from "./create-server";
|
|
3
|
+
export type { SessionToken } from "./exchange";
|
|
4
|
+
export type { PrimerLogger } from "../logger";
|
|
5
|
+
export type { GradeLevel } from "../grade-level";
|
|
6
|
+
export { GRADE_LEVELS } from "../grade-level";
|
|
7
|
+
export { ErrBadRequest, ErrInvalidSecretKey, ErrJsonParse, ErrNetwork, ErrServerError, ErrStudentNotFound, ErrTimebackUnavailable, ErrTimeout, ErrUnsupportedGrade } from "../errors";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kDAAkD,CAAA;AACrF,YAAY,EACX,YAAY,EACZ,kBAAkB,EAClB,MAAM,kDAAkD,CAAA;AAEzD,YAAY,EAAE,YAAY,EAAE,MAAM,6CAA6C,CAAA;AAE/E,YAAY,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AACtE,YAAY,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAA;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAA;AAEtE,OAAO,EACN,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,UAAU,EACV,mBAAmB,EACnB,MAAM,oCAAoC,CAAA"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
// src/server/exchange.ts
|
|
2
|
+
import * as errors2 from "@superbuilders/errors";
|
|
3
|
+
|
|
4
|
+
// src/errors.ts
|
|
5
|
+
import * as errors from "@superbuilders/errors";
|
|
6
|
+
var ErrNetwork = errors.new("network");
|
|
7
|
+
var ErrJsonParse = errors.new("json parse");
|
|
8
|
+
var ErrUnsupportedPci = errors.new("unsupported pci");
|
|
9
|
+
var ErrInvalidAccessToken = errors.new("invalid access token");
|
|
10
|
+
var ErrMalformedAccessToken = errors.new("malformed access token");
|
|
11
|
+
var ErrTokenExpired = errors.new("access token expired");
|
|
12
|
+
var ErrBadRequest = errors.new("bad request");
|
|
13
|
+
var ErrServerError = errors.new("server error");
|
|
14
|
+
var ErrTimeout = errors.new("timeout");
|
|
15
|
+
var ErrForbidden = errors.new("forbidden");
|
|
16
|
+
var ErrNotFound = errors.new("not found");
|
|
17
|
+
var ErrConflict = errors.new("conflict");
|
|
18
|
+
var ErrRateLimited = errors.new("rate limited");
|
|
19
|
+
var ErrServiceUnavailable = errors.new("service unavailable");
|
|
20
|
+
var ErrNotSerializable = errors.new("PrimerState is live in-memory state and must not be serialized or stored");
|
|
21
|
+
var ErrInvalidSubmission = errors.new("invalid submission");
|
|
22
|
+
var ErrInvalidSecretKey = errors.new("invalid secret key");
|
|
23
|
+
var ErrStudentNotFound = errors.new("student not found");
|
|
24
|
+
var ErrUnsupportedGrade = errors.new("unsupported grade");
|
|
25
|
+
var ErrTimebackUnavailable = errors.new("timeback unavailable");
|
|
26
|
+
|
|
27
|
+
// src/server/exchange.ts
|
|
28
|
+
var EXCHANGE_PATH = "/api/v0/auth/exchange";
|
|
29
|
+
function isAbortError(err) {
|
|
30
|
+
if (err instanceof DOMException && err.name === "AbortError") {
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
if (err instanceof DOMException && err.name === "TimeoutError") {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
function mapBadRequest(body) {
|
|
39
|
+
if (body.error === "unsupported_grade") {
|
|
40
|
+
return ErrUnsupportedGrade;
|
|
41
|
+
}
|
|
42
|
+
return ErrBadRequest;
|
|
43
|
+
}
|
|
44
|
+
function httpSentinel(status, body) {
|
|
45
|
+
if (status === 400) {
|
|
46
|
+
return mapBadRequest(body);
|
|
47
|
+
}
|
|
48
|
+
if (status === 401) {
|
|
49
|
+
return ErrInvalidSecretKey;
|
|
50
|
+
}
|
|
51
|
+
if (status === 404) {
|
|
52
|
+
return ErrStudentNotFound;
|
|
53
|
+
}
|
|
54
|
+
if (status === 502) {
|
|
55
|
+
return ErrTimebackUnavailable;
|
|
56
|
+
}
|
|
57
|
+
if (status >= 500 && status < 600) {
|
|
58
|
+
return ErrServerError;
|
|
59
|
+
}
|
|
60
|
+
return ErrServerError;
|
|
61
|
+
}
|
|
62
|
+
async function readErrorBody(res) {
|
|
63
|
+
const parsed = await res.json().then(function ok(data) {
|
|
64
|
+
return { ok: true, data };
|
|
65
|
+
}, function fail() {
|
|
66
|
+
return { ok: false };
|
|
67
|
+
});
|
|
68
|
+
if (!parsed.ok) {
|
|
69
|
+
return {};
|
|
70
|
+
}
|
|
71
|
+
return parsed.data;
|
|
72
|
+
}
|
|
73
|
+
async function exchangeToken(config, provider, studentId) {
|
|
74
|
+
const log = config.logger;
|
|
75
|
+
const fetchFn = config.fetch ? config.fetch : globalThis.fetch;
|
|
76
|
+
const signal = config.abort ? config.abort.signal : undefined;
|
|
77
|
+
log?.debug("exchange request", { provider });
|
|
78
|
+
const url = `${config.origin}${EXCHANGE_PATH}`;
|
|
79
|
+
const fetchResult = await fetchFn(url, {
|
|
80
|
+
method: "POST",
|
|
81
|
+
headers: {
|
|
82
|
+
"Content-Type": "application/json",
|
|
83
|
+
Authorization: `Bearer ${config.secretKey}`
|
|
84
|
+
},
|
|
85
|
+
body: JSON.stringify({ provider, student_id: studentId }),
|
|
86
|
+
signal
|
|
87
|
+
}).then(function ok(r) {
|
|
88
|
+
return { ok: true, response: r };
|
|
89
|
+
}, function fail(err) {
|
|
90
|
+
return { ok: false, error: err };
|
|
91
|
+
});
|
|
92
|
+
if (!fetchResult.ok) {
|
|
93
|
+
if (isAbortError(fetchResult.error)) {
|
|
94
|
+
log?.error("exchange timeout", { provider });
|
|
95
|
+
throw errors2.wrap(ErrTimeout, fetchResult.error.message);
|
|
96
|
+
}
|
|
97
|
+
log?.error("exchange network error", { provider, error: fetchResult.error });
|
|
98
|
+
throw errors2.wrap(ErrNetwork, fetchResult.error.message);
|
|
99
|
+
}
|
|
100
|
+
const res = fetchResult.response;
|
|
101
|
+
if (!res.ok) {
|
|
102
|
+
const body = await readErrorBody(res);
|
|
103
|
+
const sentinel = httpSentinel(res.status, body);
|
|
104
|
+
const detail = body.error ? `${res.status} ${body.error}` : `${res.status}`;
|
|
105
|
+
log?.error("exchange http error", { provider, status: res.status, body });
|
|
106
|
+
throw errors2.wrap(sentinel, detail);
|
|
107
|
+
}
|
|
108
|
+
const jsonResult = await res.json().then(function ok(data) {
|
|
109
|
+
return { ok: true, data };
|
|
110
|
+
}, function fail(err) {
|
|
111
|
+
return { ok: false, error: err };
|
|
112
|
+
});
|
|
113
|
+
if (!jsonResult.ok) {
|
|
114
|
+
log?.error("exchange json parse failed", { provider, error: jsonResult.error });
|
|
115
|
+
throw errors2.wrap(ErrJsonParse, jsonResult.error.message);
|
|
116
|
+
}
|
|
117
|
+
log?.debug("exchange success", { provider, expiresIn: jsonResult.data.expires_in });
|
|
118
|
+
return {
|
|
119
|
+
accessToken: jsonResult.data.access_token,
|
|
120
|
+
expiresInSeconds: jsonResult.data.expires_in
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// src/server/students.ts
|
|
125
|
+
import * as errors3 from "@superbuilders/errors";
|
|
126
|
+
var STUDENTS_PATH = "/api/v0/students";
|
|
127
|
+
function isAbortError2(err) {
|
|
128
|
+
if (err instanceof DOMException && err.name === "AbortError") {
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
131
|
+
if (err instanceof DOMException && err.name === "TimeoutError") {
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
function httpSentinel2(status) {
|
|
137
|
+
if (status === 400) {
|
|
138
|
+
return ErrBadRequest;
|
|
139
|
+
}
|
|
140
|
+
if (status === 401) {
|
|
141
|
+
return ErrInvalidSecretKey;
|
|
142
|
+
}
|
|
143
|
+
if (status === 404) {
|
|
144
|
+
return ErrStudentNotFound;
|
|
145
|
+
}
|
|
146
|
+
return ErrServerError;
|
|
147
|
+
}
|
|
148
|
+
async function readErrorBody2(res) {
|
|
149
|
+
const parsed = await res.json().then(function ok(data) {
|
|
150
|
+
return { ok: true, data };
|
|
151
|
+
}, function fail() {
|
|
152
|
+
return { ok: false };
|
|
153
|
+
});
|
|
154
|
+
if (!parsed.ok) {
|
|
155
|
+
return {};
|
|
156
|
+
}
|
|
157
|
+
return parsed.data;
|
|
158
|
+
}
|
|
159
|
+
async function sendStudentsRequest(config, path, method, body) {
|
|
160
|
+
const log = config.logger;
|
|
161
|
+
const fetchFn = config.fetch ? config.fetch : globalThis.fetch;
|
|
162
|
+
const signal = config.abort ? config.abort.signal : undefined;
|
|
163
|
+
const url = `${config.origin}${path}`;
|
|
164
|
+
const fetchResult = await fetchFn(url, {
|
|
165
|
+
method,
|
|
166
|
+
headers: {
|
|
167
|
+
"Content-Type": "application/json",
|
|
168
|
+
Authorization: `Bearer ${config.secretKey}`
|
|
169
|
+
},
|
|
170
|
+
body: JSON.stringify(body),
|
|
171
|
+
signal
|
|
172
|
+
}).then(function ok(r) {
|
|
173
|
+
return { ok: true, response: r };
|
|
174
|
+
}, function fail(err) {
|
|
175
|
+
return { ok: false, error: err };
|
|
176
|
+
});
|
|
177
|
+
if (!fetchResult.ok) {
|
|
178
|
+
if (isAbortError2(fetchResult.error)) {
|
|
179
|
+
log?.error("students timeout", { path, method });
|
|
180
|
+
throw errors3.wrap(ErrTimeout, fetchResult.error.message);
|
|
181
|
+
}
|
|
182
|
+
log?.error("students network error", { path, method, error: fetchResult.error });
|
|
183
|
+
throw errors3.wrap(ErrNetwork, fetchResult.error.message);
|
|
184
|
+
}
|
|
185
|
+
return fetchResult.response;
|
|
186
|
+
}
|
|
187
|
+
async function createStudent(config, gradeLevel) {
|
|
188
|
+
const log = config.logger;
|
|
189
|
+
log?.debug("create student request", { gradeLevel });
|
|
190
|
+
const res = await sendStudentsRequest(config, STUDENTS_PATH, "POST", {
|
|
191
|
+
grade_level: gradeLevel
|
|
192
|
+
});
|
|
193
|
+
if (!res.ok) {
|
|
194
|
+
const body = await readErrorBody2(res);
|
|
195
|
+
const sentinel = httpSentinel2(res.status);
|
|
196
|
+
const detail = body.error ? `${res.status} ${body.error}` : `${res.status}`;
|
|
197
|
+
log?.error("create student http error", { status: res.status, body });
|
|
198
|
+
throw errors3.wrap(sentinel, detail);
|
|
199
|
+
}
|
|
200
|
+
const jsonResult = await res.json().then(function ok(data) {
|
|
201
|
+
return { ok: true, data };
|
|
202
|
+
}, function fail(err) {
|
|
203
|
+
return { ok: false, error: err };
|
|
204
|
+
});
|
|
205
|
+
if (!jsonResult.ok) {
|
|
206
|
+
log?.error("create student json parse failed", { error: jsonResult.error });
|
|
207
|
+
throw errors3.wrap(ErrJsonParse, jsonResult.error.message);
|
|
208
|
+
}
|
|
209
|
+
log?.debug("create student success", { studentId: jsonResult.data.student_id });
|
|
210
|
+
return jsonResult.data.student_id;
|
|
211
|
+
}
|
|
212
|
+
async function updateStudentGradeLevel(config, studentId, gradeLevel) {
|
|
213
|
+
const log = config.logger;
|
|
214
|
+
log?.debug("update student grade request", { studentId, gradeLevel });
|
|
215
|
+
const res = await sendStudentsRequest(config, `${STUDENTS_PATH}/${encodeURIComponent(studentId)}`, "PATCH", { gradeLevel });
|
|
216
|
+
if (!res.ok) {
|
|
217
|
+
const body = await readErrorBody2(res);
|
|
218
|
+
const sentinel = httpSentinel2(res.status);
|
|
219
|
+
const detail = body.error ? `${res.status} ${body.error}` : `${res.status}`;
|
|
220
|
+
log?.error("update student http error", { status: res.status, body });
|
|
221
|
+
throw errors3.wrap(sentinel, detail);
|
|
222
|
+
}
|
|
223
|
+
log?.debug("update student success", { studentId });
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// src/server/create-server.ts
|
|
227
|
+
function createPrimerServer(config) {
|
|
228
|
+
return {
|
|
229
|
+
createNativeStudent(gradeLevel) {
|
|
230
|
+
return createStudent(config, gradeLevel);
|
|
231
|
+
},
|
|
232
|
+
updateNativeStudentGradeLevel(studentId, gradeLevel) {
|
|
233
|
+
return updateStudentGradeLevel(config, studentId, gradeLevel);
|
|
234
|
+
},
|
|
235
|
+
exchangeNativeStudentForAccessToken(studentId) {
|
|
236
|
+
return exchangeToken(config, "native", studentId);
|
|
237
|
+
},
|
|
238
|
+
exchangeTimebackStudentForAccessToken(sourcedId) {
|
|
239
|
+
return exchangeToken(config, "timeback", sourcedId);
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
// src/grade-level.ts
|
|
244
|
+
var GRADE_LEVELS = ["K", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"];
|
|
245
|
+
export {
|
|
246
|
+
createPrimerServer,
|
|
247
|
+
GRADE_LEVELS,
|
|
248
|
+
ErrUnsupportedGrade,
|
|
249
|
+
ErrTimeout,
|
|
250
|
+
ErrTimebackUnavailable,
|
|
251
|
+
ErrStudentNotFound,
|
|
252
|
+
ErrServerError,
|
|
253
|
+
ErrNetwork,
|
|
254
|
+
ErrJsonParse,
|
|
255
|
+
ErrInvalidSecretKey,
|
|
256
|
+
ErrBadRequest
|
|
257
|
+
};
|
|
258
|
+
|
|
259
|
+
//# debugId=3128BCEC46D85F5764756E2164756E21
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/server/exchange.ts", "../src/errors.ts", "../src/server/students.ts", "../src/server/create-server.ts", "../src/grade-level.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import * as errors from \"@superbuilders/errors\"\nimport {\n\tErrBadRequest,\n\tErrInvalidSecretKey,\n\tErrJsonParse,\n\tErrNetwork,\n\tErrServerError,\n\tErrStudentNotFound,\n\tErrTimebackUnavailable,\n\tErrTimeout,\n\tErrUnsupportedGrade\n} from \"@superbuilders/primer-tives/errors\"\nimport type { PrimerLogger } from \"@superbuilders/primer-tives/logger\"\n\nconst EXCHANGE_PATH = \"/api/v0/auth/exchange\"\n\ntype Provider = \"native\" | \"timeback\"\n\ninterface ExchangeConfig {\n\treadonly origin: string\n\treadonly secretKey: string\n\treadonly fetch?: typeof globalThis.fetch\n\treadonly abort?: AbortController\n\treadonly logger?: PrimerLogger\n}\n\ninterface SessionToken {\n\treadonly accessToken: string\n\treadonly expiresInSeconds: number\n}\n\ninterface ExchangeSuccessBody {\n\taccess_token: string\n\ttoken_type: \"Bearer\"\n\texpires_in: number\n\tscope: string\n}\n\ninterface ExchangeErrorBody {\n\terror?: string\n}\n\nfunction isAbortError(err: unknown): boolean {\n\tif (err instanceof DOMException && err.name === \"AbortError\") {\n\t\treturn true\n\t}\n\tif (err instanceof DOMException && err.name === \"TimeoutError\") {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunction mapBadRequest(body: ExchangeErrorBody): Error {\n\tif (body.error === \"unsupported_grade\") {\n\t\treturn ErrUnsupportedGrade\n\t}\n\treturn ErrBadRequest\n}\n\nfunction httpSentinel(status: number, body: ExchangeErrorBody): Error {\n\tif (status === 400) {\n\t\treturn mapBadRequest(body)\n\t}\n\tif (status === 401) {\n\t\treturn ErrInvalidSecretKey\n\t}\n\tif (status === 404) {\n\t\treturn ErrStudentNotFound\n\t}\n\tif (status === 502) {\n\t\treturn ErrTimebackUnavailable\n\t}\n\tif (status >= 500 && status < 600) {\n\t\treturn ErrServerError\n\t}\n\treturn ErrServerError\n}\n\nasync function readErrorBody(res: Response): Promise<ExchangeErrorBody> {\n\tconst parsed = await res.json().then(\n\t\tfunction ok(data: ExchangeErrorBody) {\n\t\t\treturn { ok: true, data } as const\n\t\t},\n\t\tfunction fail() {\n\t\t\treturn { ok: false } as const\n\t\t}\n\t)\n\tif (!parsed.ok) {\n\t\treturn {}\n\t}\n\treturn parsed.data\n}\n\nasync function exchangeToken(\n\tconfig: ExchangeConfig,\n\tprovider: Provider,\n\tstudentId: string\n): Promise<SessionToken> {\n\tconst log = config.logger\n\tconst fetchFn = config.fetch ? config.fetch : globalThis.fetch\n\tconst signal = config.abort ? config.abort.signal : undefined\n\n\tlog?.debug(\"exchange request\", { provider })\n\n\tconst url = `${config.origin}${EXCHANGE_PATH}`\n\tconst fetchResult = await fetchFn(url, {\n\t\tmethod: \"POST\",\n\t\theaders: {\n\t\t\t\"Content-Type\": \"application/json\",\n\t\t\tAuthorization: `Bearer ${config.secretKey}`\n\t\t},\n\t\tbody: JSON.stringify({ provider, student_id: studentId }),\n\t\tsignal\n\t}).then(\n\t\tfunction ok(r: Response) {\n\t\t\treturn { ok: true, response: r } as const\n\t\t},\n\t\tfunction fail(err: Error) {\n\t\t\treturn { ok: false, error: err } as const\n\t\t}\n\t)\n\n\tif (!fetchResult.ok) {\n\t\tif (isAbortError(fetchResult.error)) {\n\t\t\tlog?.error(\"exchange timeout\", { provider })\n\t\t\t// biome-ignore lint/plugin: server SDK — log is optional config.logger, not slog\n\t\t\tthrow errors.wrap(ErrTimeout, fetchResult.error.message)\n\t\t}\n\t\tlog?.error(\"exchange network error\", { provider, error: fetchResult.error })\n\t\t// biome-ignore lint/plugin: server SDK — log is optional config.logger, not slog\n\t\tthrow errors.wrap(ErrNetwork, fetchResult.error.message)\n\t}\n\n\tconst res = fetchResult.response\n\n\tif (!res.ok) {\n\t\tconst body = await readErrorBody(res)\n\t\tconst sentinel = httpSentinel(res.status, body)\n\t\tconst detail = body.error ? `${res.status} ${body.error}` : `${res.status}`\n\t\tlog?.error(\"exchange http error\", { provider, status: res.status, body })\n\t\t// biome-ignore lint/plugin: server SDK — log is optional config.logger, not slog\n\t\tthrow errors.wrap(sentinel, detail)\n\t}\n\n\tconst jsonResult = await res.json().then(\n\t\tfunction ok(data: ExchangeSuccessBody) {\n\t\t\treturn { ok: true, data } as const\n\t\t},\n\t\tfunction fail(err: Error) {\n\t\t\treturn { ok: false, error: err } as const\n\t\t}\n\t)\n\n\tif (!jsonResult.ok) {\n\t\tlog?.error(\"exchange json parse failed\", { provider, error: jsonResult.error })\n\t\t// biome-ignore lint/plugin: server SDK — log is optional config.logger, not slog\n\t\tthrow errors.wrap(ErrJsonParse, jsonResult.error.message)\n\t}\n\n\tlog?.debug(\"exchange success\", { provider, expiresIn: jsonResult.data.expires_in })\n\n\treturn {\n\t\taccessToken: jsonResult.data.access_token,\n\t\texpiresInSeconds: jsonResult.data.expires_in\n\t}\n}\n\nexport type { ExchangeConfig, SessionToken }\nexport { exchangeToken }\n",
|
|
6
|
+
"import * as errors from \"@superbuilders/errors\"\n\nconst ErrNetwork = errors.new(\"network\")\nconst ErrJsonParse = errors.new(\"json parse\")\nconst ErrUnsupportedPci = errors.new(\"unsupported pci\")\nconst ErrInvalidAccessToken = errors.new(\"invalid access token\")\nconst ErrMalformedAccessToken = errors.new(\"malformed access token\")\nconst ErrTokenExpired = errors.new(\"access token expired\")\nconst ErrBadRequest = errors.new(\"bad request\")\nconst ErrServerError = errors.new(\"server error\")\nconst ErrTimeout = errors.new(\"timeout\")\nconst ErrForbidden = errors.new(\"forbidden\")\nconst ErrNotFound = errors.new(\"not found\")\nconst ErrConflict = errors.new(\"conflict\")\nconst ErrRateLimited = errors.new(\"rate limited\")\nconst ErrServiceUnavailable = errors.new(\"service unavailable\")\nconst ErrNotSerializable = errors.new(\n\t\"PrimerState is live in-memory state and must not be serialized or stored\"\n)\nconst ErrInvalidSubmission = errors.new(\"invalid submission\")\n\nconst ErrInvalidSecretKey = errors.new(\"invalid secret key\")\nconst ErrStudentNotFound = errors.new(\"student not found\")\nconst ErrUnsupportedGrade = errors.new(\"unsupported grade\")\nconst ErrTimebackUnavailable = errors.new(\"timeback unavailable\")\n\nexport {\n\tErrBadRequest,\n\tErrConflict,\n\tErrForbidden,\n\tErrInvalidAccessToken,\n\tErrInvalidSecretKey,\n\tErrInvalidSubmission,\n\tErrJsonParse,\n\tErrMalformedAccessToken,\n\tErrNetwork,\n\tErrNotFound,\n\tErrNotSerializable,\n\tErrRateLimited,\n\tErrServerError,\n\tErrServiceUnavailable,\n\tErrStudentNotFound,\n\tErrTimebackUnavailable,\n\tErrTimeout,\n\tErrTokenExpired,\n\tErrUnsupportedGrade,\n\tErrUnsupportedPci\n}\n",
|
|
7
|
+
"import * as errors from \"@superbuilders/errors\"\nimport {\n\tErrBadRequest,\n\tErrInvalidSecretKey,\n\tErrJsonParse,\n\tErrNetwork,\n\tErrServerError,\n\tErrStudentNotFound,\n\tErrTimeout\n} from \"@superbuilders/primer-tives/errors\"\nimport type { GradeLevel } from \"@superbuilders/primer-tives/grade-level\"\nimport type { PrimerLogger } from \"@superbuilders/primer-tives/logger\"\n\nconst STUDENTS_PATH = \"/api/v0/students\"\n\ninterface StudentsConfig {\n\treadonly origin: string\n\treadonly secretKey: string\n\treadonly fetch?: typeof globalThis.fetch\n\treadonly abort?: AbortController\n\treadonly logger?: PrimerLogger\n}\n\ninterface CreateStudentSuccessBody {\n\tstudent_id: string\n}\n\ninterface StudentsErrorBody {\n\terror?: string\n}\n\nfunction isAbortError(err: unknown): boolean {\n\tif (err instanceof DOMException && err.name === \"AbortError\") {\n\t\treturn true\n\t}\n\tif (err instanceof DOMException && err.name === \"TimeoutError\") {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunction httpSentinel(status: number): Error {\n\tif (status === 400) {\n\t\treturn ErrBadRequest\n\t}\n\tif (status === 401) {\n\t\treturn ErrInvalidSecretKey\n\t}\n\tif (status === 404) {\n\t\treturn ErrStudentNotFound\n\t}\n\treturn ErrServerError\n}\n\nasync function readErrorBody(res: Response): Promise<StudentsErrorBody> {\n\tconst parsed = await res.json().then(\n\t\tfunction ok(data: StudentsErrorBody) {\n\t\t\treturn { ok: true, data } as const\n\t\t},\n\t\tfunction fail() {\n\t\t\treturn { ok: false } as const\n\t\t}\n\t)\n\tif (!parsed.ok) {\n\t\treturn {}\n\t}\n\treturn parsed.data\n}\n\nasync function sendStudentsRequest(\n\tconfig: StudentsConfig,\n\tpath: string,\n\tmethod: \"POST\" | \"PATCH\",\n\tbody: Record<string, unknown>\n): Promise<Response> {\n\tconst log = config.logger\n\tconst fetchFn = config.fetch ? config.fetch : globalThis.fetch\n\tconst signal = config.abort ? config.abort.signal : undefined\n\n\tconst url = `${config.origin}${path}`\n\tconst fetchResult = await fetchFn(url, {\n\t\tmethod,\n\t\theaders: {\n\t\t\t\"Content-Type\": \"application/json\",\n\t\t\tAuthorization: `Bearer ${config.secretKey}`\n\t\t},\n\t\tbody: JSON.stringify(body),\n\t\tsignal\n\t}).then(\n\t\tfunction ok(r: Response) {\n\t\t\treturn { ok: true, response: r } as const\n\t\t},\n\t\tfunction fail(err: Error) {\n\t\t\treturn { ok: false, error: err } as const\n\t\t}\n\t)\n\n\tif (!fetchResult.ok) {\n\t\tif (isAbortError(fetchResult.error)) {\n\t\t\tlog?.error(\"students timeout\", { path, method })\n\t\t\t// biome-ignore lint/plugin: server SDK — log is optional config.logger, not slog\n\t\t\tthrow errors.wrap(ErrTimeout, fetchResult.error.message)\n\t\t}\n\t\tlog?.error(\"students network error\", { path, method, error: fetchResult.error })\n\t\t// biome-ignore lint/plugin: server SDK — log is optional config.logger, not slog\n\t\tthrow errors.wrap(ErrNetwork, fetchResult.error.message)\n\t}\n\n\treturn fetchResult.response\n}\n\nasync function createStudent(config: StudentsConfig, gradeLevel: GradeLevel): Promise<string> {\n\tconst log = config.logger\n\tlog?.debug(\"create student request\", { gradeLevel })\n\n\tconst res = await sendStudentsRequest(config, STUDENTS_PATH, \"POST\", {\n\t\tgrade_level: gradeLevel\n\t})\n\n\tif (!res.ok) {\n\t\tconst body = await readErrorBody(res)\n\t\tconst sentinel = httpSentinel(res.status)\n\t\tconst detail = body.error ? `${res.status} ${body.error}` : `${res.status}`\n\t\tlog?.error(\"create student http error\", { status: res.status, body })\n\t\t// biome-ignore lint/plugin: server SDK — log is optional config.logger, not slog\n\t\tthrow errors.wrap(sentinel, detail)\n\t}\n\n\tconst jsonResult = await res.json().then(\n\t\tfunction ok(data: CreateStudentSuccessBody) {\n\t\t\treturn { ok: true, data } as const\n\t\t},\n\t\tfunction fail(err: Error) {\n\t\t\treturn { ok: false, error: err } as const\n\t\t}\n\t)\n\n\tif (!jsonResult.ok) {\n\t\tlog?.error(\"create student json parse failed\", { error: jsonResult.error })\n\t\t// biome-ignore lint/plugin: server SDK — log is optional config.logger, not slog\n\t\tthrow errors.wrap(ErrJsonParse, jsonResult.error.message)\n\t}\n\n\tlog?.debug(\"create student success\", { studentId: jsonResult.data.student_id })\n\treturn jsonResult.data.student_id\n}\n\nasync function updateStudentGradeLevel(\n\tconfig: StudentsConfig,\n\tstudentId: string,\n\tgradeLevel: GradeLevel\n): Promise<void> {\n\tconst log = config.logger\n\tlog?.debug(\"update student grade request\", { studentId, gradeLevel })\n\n\tconst res = await sendStudentsRequest(\n\t\tconfig,\n\t\t`${STUDENTS_PATH}/${encodeURIComponent(studentId)}`,\n\t\t\"PATCH\",\n\t\t{ gradeLevel }\n\t)\n\n\tif (!res.ok) {\n\t\tconst body = await readErrorBody(res)\n\t\tconst sentinel = httpSentinel(res.status)\n\t\tconst detail = body.error ? `${res.status} ${body.error}` : `${res.status}`\n\t\tlog?.error(\"update student http error\", { status: res.status, body })\n\t\t// biome-ignore lint/plugin: server SDK — log is optional config.logger, not slog\n\t\tthrow errors.wrap(sentinel, detail)\n\t}\n\n\tlog?.debug(\"update student success\", { studentId })\n}\n\nexport type { StudentsConfig }\nexport { createStudent, updateStudentGradeLevel }\n",
|
|
8
|
+
"import type { GradeLevel } from \"@superbuilders/primer-tives/grade-level\"\nimport type { PrimerLogger } from \"@superbuilders/primer-tives/logger\"\nimport { type SessionToken, exchangeToken } from \"@superbuilders/primer-tives/server/exchange\"\nimport { createStudent, updateStudentGradeLevel } from \"@superbuilders/primer-tives/server/students\"\n\ninterface PrimerServerConfig {\n\treadonly origin: string\n\treadonly secretKey: string\n\treadonly fetch?: typeof globalThis.fetch\n\treadonly abort?: AbortController\n\treadonly logger?: PrimerLogger\n}\n\ninterface PrimerServer {\n\t/**\n\t * Native only: provision a new Primer-owned student. Returns a stable\n\t * studentId string you persist in your own DB keyed by your user. Pair\n\t * this value with `exchangeNativeStudentForAccessToken` on every\n\t * session start. Timeback integrations do NOT call this — they\n\t * provision automatically on exchange.\n\t */\n\tcreateNativeStudent(gradeLevel: GradeLevel): Promise<string>\n\n\t/**\n\t * Native only: update an existing Primer student's grade level. For\n\t * Timeback, grade changes flow from the SIS — do not call this.\n\t */\n\tupdateNativeStudentGradeLevel(studentId: string, gradeLevel: GradeLevel): Promise<void>\n\n\t/**\n\t * Native only: exchange a Primer-minted studentId for a short-lived\n\t * access token. Pass `accessToken` from the returned `SessionToken` to\n\t * `create()` on the browser SDK.\n\t */\n\texchangeNativeStudentForAccessToken(studentId: string): Promise<SessionToken>\n\n\t/**\n\t * Timeback only: exchange a OneRoster sourcedId for a short-lived\n\t * access token. The underlying Primer student is auto-provisioned on\n\t * first exchange. Pass `accessToken` from the returned `SessionToken`\n\t * to `create()` on the browser SDK.\n\t */\n\texchangeTimebackStudentForAccessToken(sourcedId: string): Promise<SessionToken>\n}\n\nfunction createPrimerServer(config: PrimerServerConfig): PrimerServer {\n\treturn {\n\t\tcreateNativeStudent(gradeLevel): Promise<string> {\n\t\t\treturn createStudent(config, gradeLevel)\n\t\t},\n\t\tupdateNativeStudentGradeLevel(studentId, gradeLevel): Promise<void> {\n\t\t\treturn updateStudentGradeLevel(config, studentId, gradeLevel)\n\t\t},\n\t\texchangeNativeStudentForAccessToken(studentId): Promise<SessionToken> {\n\t\t\treturn exchangeToken(config, \"native\", studentId)\n\t\t},\n\t\texchangeTimebackStudentForAccessToken(sourcedId): Promise<SessionToken> {\n\t\t\treturn exchangeToken(config, \"timeback\", sourcedId)\n\t\t}\n\t}\n}\n\nexport type { PrimerServer, PrimerServerConfig }\nexport { createPrimerServer }\n",
|
|
9
|
+
"const GRADE_LEVELS = [\"K\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"] as const\n\ntype GradeLevel = (typeof GRADE_LEVELS)[number]\n\nexport { GRADE_LEVELS }\nexport type { GradeLevel }\n"
|
|
10
|
+
],
|
|
11
|
+
"mappings": "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",
|
|
12
|
+
"debugId": "3128BCEC46D85F5764756E2164756E21",
|
|
13
|
+
"names": []
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { GradeLevel } from "../grade-level";
|
|
2
|
+
import type { PrimerLogger } from "../logger";
|
|
3
|
+
interface StudentsConfig {
|
|
4
|
+
readonly origin: string;
|
|
5
|
+
readonly secretKey: string;
|
|
6
|
+
readonly fetch?: typeof globalThis.fetch;
|
|
7
|
+
readonly abort?: AbortController;
|
|
8
|
+
readonly logger?: PrimerLogger;
|
|
9
|
+
}
|
|
10
|
+
declare function createStudent(config: StudentsConfig, gradeLevel: GradeLevel): Promise<string>;
|
|
11
|
+
declare function updateStudentGradeLevel(config: StudentsConfig, studentId: string, gradeLevel: GradeLevel): Promise<void>;
|
|
12
|
+
export type { StudentsConfig };
|
|
13
|
+
export { createStudent, updateStudentGradeLevel };
|
|
14
|
+
//# sourceMappingURL=students.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"students.d.ts","sourceRoot":"","sources":["../../src/server/students.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAA;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AAItE,UAAU,cAAc;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAA;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAA;CAC9B;AA0FD,iBAAe,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAkC5F;AAED,iBAAe,uBAAuB,CACrC,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,GACpB,OAAO,CAAC,IAAI,CAAC,CAqBf;AAED,YAAY,EAAE,cAAc,EAAE,CAAA;AAC9B,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,CAAA"}
|
package/dist/subject.d.ts
CHANGED
package/dist/subject.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subject.d.ts","sourceRoot":"","sources":["../src/subject.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"subject.d.ts","sourceRoot":"","sources":["../src/subject.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,QAAQ,4CAA6C,CAAA;AAE3D,KAAK,OAAO,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAA;AAExC,KAAK,YAAY,GAAG,OAAO,GAAG,KAAK,CAAA;AAEnC,OAAO,EAAE,QAAQ,EAAE,CAAA;AACnB,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@superbuilders/primer-tives",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
|
-
"
|
|
7
|
-
"types": "./dist/index.d.ts",
|
|
8
|
-
"import": "./dist/index.js"
|
|
6
|
+
"./client": {
|
|
7
|
+
"types": "./dist/client/index.d.ts",
|
|
8
|
+
"import": "./dist/client/index.js"
|
|
9
|
+
},
|
|
10
|
+
"./server": {
|
|
11
|
+
"types": "./dist/server/index.d.ts",
|
|
12
|
+
"import": "./dist/server/index.js"
|
|
9
13
|
}
|
|
10
14
|
},
|
|
11
15
|
"files": [
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"choice-state.d.ts","sourceRoot":"","sources":["../src/choice-state.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAA;AACjF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;AAC5D,OAAO,KAAK,EACX,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,MAAM,mCAAmC,CAAA;AA6C1C,iBAAS,WAAW,CAAC,IAAI,SAAS,KAAK,EACtC,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,QAAQ,CAAA;CAAE,CAAC,EACnE,OAAO,EAAE,cAAc,EAAE,EACzB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GAChB,WAAW,CAAC,IAAI,CAAC,CAsFnB;AAED,OAAO,EAAE,WAAW,EAAE,CAAA"}
|
package/dist/client.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6CAA6C,CAAA;AAC/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAA;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAMpE,UAAU,MAAM,CAAC,IAAI,SAAS,KAAK,GAAG,KAAK;IAC1C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,aAAa,EAAE,SAAS,IAAI,EAAE,CAAA;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAA;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAA;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAA;CAC9B;AAED,UAAU,MAAM,CAAC,IAAI,SAAS,KAAK,GAAG,KAAK;IAC1C,KAAK,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA;CACnC;AAUD,iBAAS,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CA4C5E;AAED,OAAO,EAAE,MAAM,EAAE,CAAA;AACjB,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,CAAA"}
|
package/dist/consumed.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"consumed.d.ts","sourceRoot":"","sources":["../src/consumed.ts"],"names":[],"mappings":"AAEA,iBAAS,YAAY,IAAI,KAAK,CAG7B;AAED,OAAO,EAAE,YAAY,EAAE,CAAA"}
|
package/dist/content.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"AAAA,KAAK,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAEtF,KAAK,aAAa,GAAG,WAAW,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAEnE,KAAK,YAAY,GAAG;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAAE,CAAA;AAEpE,iBAAS,kBAAkB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,MAAM,CAgB1D;AAED,iBAAS,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,CAMzD;AAED,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"extended-text-state.d.ts","sourceRoot":"","sources":["../src/extended-text-state.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAA;AACjF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;AAC5D,OAAO,KAAK,EACX,WAAW,EACX,gBAAgB,EAChB,2BAA2B,EAC3B,MAAM,mCAAmC,CAAA;AAoB1C,iBAAS,iBAAiB,CAAC,IAAI,SAAS,KAAK,EAC5C,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,EACzB,QAAQ,EAAE,gBAAgB,GAAG,IAAI,EACjC,WAAW,EAAE,OAAO,CAAC,2BAA2B,EAAE;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,CAAC,GAC1E,WAAW,CAAC,IAAI,CAAC,CA0JnB;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"feedback-state.d.ts","sourceRoot":"","sources":["../src/feedback-state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAA;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAA;AACjF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;AAC5D,OAAO,KAAK,EACX,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,MAAM,mCAAmC,CAAA;AAE1C,iBAAS,aAAa,CAAC,IAAI,SAAS,KAAK,EACxC,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,EACzB,QAAQ,EAAE,gBAAgB,GAAG,IAAI,EACjC,WAAW,EAAE,mBAAmB,CAAC,IAAI,CAAC,EACtC,UAAU,EAAE,kBAAkB,CAAC,IAAI,CAAC,EACpC,SAAS,EAAE,OAAO,EAClB,eAAe,EAAE,aAAa,EAAE,EAChC,MAAM,EAAE,iBAAiB,CAAC,IAAI,CAAC,GAAG,IAAI,GACpC,WAAW,CAAC,IAAI,CAAC,CAmBnB;AAED,OAAO,EAAE,aAAa,EAAE,CAAA"}
|