@superbuilders/primer-tives 2.2.1 → 3.5.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.
Files changed (48) hide show
  1. package/README.md +813 -446
  2. package/dist/client/auth/access-token.d.ts +10 -0
  3. package/dist/client/auth/access-token.d.ts.map +1 -0
  4. package/dist/client/auth/browser.d.ts +20 -0
  5. package/dist/client/auth/browser.d.ts.map +1 -0
  6. package/dist/client/auth/callback.d.ts +10 -0
  7. package/dist/client/auth/callback.d.ts.map +1 -0
  8. package/dist/client/auth/hosted-popup.d.ts +14 -0
  9. package/dist/client/auth/hosted-popup.d.ts.map +1 -0
  10. package/dist/client/auth/provider.d.ts +14 -0
  11. package/dist/client/auth/provider.d.ts.map +1 -0
  12. package/dist/client/auth/storage.d.ts +9 -0
  13. package/dist/client/auth/storage.d.ts.map +1 -0
  14. package/dist/client/create.d.ts +22 -25
  15. package/dist/client/create.d.ts.map +1 -1
  16. package/dist/client/create.type-test.d.ts +2 -0
  17. package/dist/client/create.type-test.d.ts.map +1 -0
  18. package/dist/client/index.d.ts +1 -1
  19. package/dist/client/index.d.ts.map +1 -1
  20. package/dist/client/index.js +336 -74
  21. package/dist/client/index.js.map +14 -10
  22. package/dist/client/runtime-subject.d.ts +4 -0
  23. package/dist/client/runtime-subject.d.ts.map +1 -0
  24. package/dist/client/session.d.ts +2 -2
  25. package/dist/client/session.d.ts.map +1 -1
  26. package/dist/client/transport.d.ts +6 -4
  27. package/dist/client/transport.d.ts.map +1 -1
  28. package/dist/errors.d.ts +7 -3
  29. package/dist/errors.d.ts.map +1 -1
  30. package/dist/errors.js +14 -6
  31. package/dist/errors.js.map +3 -3
  32. package/dist/subject-pcis.d.ts +11 -5
  33. package/dist/subject-pcis.d.ts.map +1 -1
  34. package/dist/subject-pcis.js +39 -0
  35. package/dist/subject-pcis.js.map +11 -0
  36. package/dist/subject.d.ts +1 -2
  37. package/dist/subject.d.ts.map +1 -1
  38. package/dist/subject.js.map +1 -1
  39. package/dist/version.d.ts +1 -1
  40. package/package.json +2 -6
  41. package/dist/server/create-server.d.ts +0 -17
  42. package/dist/server/create-server.d.ts.map +0 -1
  43. package/dist/server/exchange.d.ts +0 -16
  44. package/dist/server/exchange.d.ts.map +0 -1
  45. package/dist/server/index.d.ts +0 -3
  46. package/dist/server/index.d.ts.map +0 -1
  47. package/dist/server/index.js +0 -173
  48. package/dist/server/index.js.map +0 -12
package/dist/errors.js CHANGED
@@ -3,7 +3,6 @@ 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");
7
6
  var ErrInvalidAccessToken = errors.new("invalid access token");
8
7
  var ErrMalformedAccessToken = errors.new("malformed access token");
9
8
  var ErrTokenExpired = errors.new("access token expired");
@@ -17,7 +16,12 @@ var ErrRateLimited = errors.new("rate limited");
17
16
  var ErrServiceUnavailable = errors.new("service unavailable");
18
17
  var ErrNotSerializable = errors.new("PrimerState is live in-memory state and must not be serialized or stored");
19
18
  var ErrInvalidSubmission = errors.new("invalid submission");
20
- var ErrInvalidSecretKey = errors.new("invalid secret key");
19
+ var ErrAuthUnavailable = errors.new("auth unavailable");
20
+ var ErrAuthConfigInvalid = errors.new("auth config invalid");
21
+ var ErrAuthCallbackInvalid = errors.new("auth callback invalid");
22
+ var ErrAuthStateMismatch = errors.new("auth state mismatch");
23
+ var ErrAuthPopupBlocked = errors.new("auth popup blocked");
24
+ var ErrAuthCancelled = errors.new("auth cancelled");
21
25
  var ErrSdkUpgradeRequired = errors.new("sdk upgrade required");
22
26
  export {
23
27
  ErrUnsupportedPci,
@@ -30,15 +34,19 @@ export {
30
34
  ErrNotSerializable,
31
35
  ErrNotFound,
32
36
  ErrNetwork,
33
- ErrMissingRequiredPci,
34
37
  ErrMalformedAccessToken,
35
38
  ErrJsonParse,
36
39
  ErrInvalidSubmission,
37
- ErrInvalidSecretKey,
38
40
  ErrInvalidAccessToken,
39
41
  ErrForbidden,
40
42
  ErrConflict,
41
- ErrBadRequest
43
+ ErrBadRequest,
44
+ ErrAuthUnavailable,
45
+ ErrAuthStateMismatch,
46
+ ErrAuthPopupBlocked,
47
+ ErrAuthConfigInvalid,
48
+ ErrAuthCancelled,
49
+ ErrAuthCallbackInvalid
42
50
  };
43
51
 
44
- //# debugId=D51B1F012B867B6764756E2164756E21
52
+ //# debugId=9476780C10F3E50264756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/errors.ts"],
4
4
  "sourcesContent": [
5
- "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 ErrMissingRequiredPci = errors.new(\"missing required 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 ErrSdkUpgradeRequired = errors.new(\"sdk upgrade required\")\n\nexport {\n\tErrBadRequest,\n\tErrConflict,\n\tErrForbidden,\n\tErrInvalidAccessToken,\n\tErrInvalidSecretKey,\n\tErrInvalidSubmission,\n\tErrJsonParse,\n\tErrMalformedAccessToken,\n\tErrMissingRequiredPci,\n\tErrNetwork,\n\tErrNotFound,\n\tErrNotSerializable,\n\tErrRateLimited,\n\tErrSdkUpgradeRequired,\n\tErrServerError,\n\tErrServiceUnavailable,\n\tErrTimeout,\n\tErrTokenExpired,\n\tErrUnsupportedPci\n}\n"
5
+ "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\")\nconst ErrAuthUnavailable = errors.new(\"auth unavailable\")\nconst ErrAuthConfigInvalid = errors.new(\"auth config invalid\")\nconst ErrAuthCallbackInvalid = errors.new(\"auth callback invalid\")\nconst ErrAuthStateMismatch = errors.new(\"auth state mismatch\")\nconst ErrAuthPopupBlocked = errors.new(\"auth popup blocked\")\nconst ErrAuthCancelled = errors.new(\"auth cancelled\")\n\nconst ErrSdkUpgradeRequired = errors.new(\"sdk upgrade required\")\n\nexport {\n\tErrAuthCallbackInvalid,\n\tErrAuthCancelled,\n\tErrAuthConfigInvalid,\n\tErrAuthPopupBlocked,\n\tErrAuthStateMismatch,\n\tErrAuthUnavailable,\n\tErrBadRequest,\n\tErrConflict,\n\tErrForbidden,\n\tErrInvalidAccessToken,\n\tErrInvalidSubmission,\n\tErrJsonParse,\n\tErrMalformedAccessToken,\n\tErrNetwork,\n\tErrNotFound,\n\tErrNotSerializable,\n\tErrRateLimited,\n\tErrSdkUpgradeRequired,\n\tErrServerError,\n\tErrServiceUnavailable,\n\tErrTimeout,\n\tErrTokenExpired,\n\tErrUnsupportedPci\n}\n"
6
6
  ],
7
- "mappings": ";AAAA;AAEA,IAAM,aAAoB,WAAI,SAAS;AACvC,IAAM,eAAsB,WAAI,YAAY;AAC5C,IAAM,oBAA2B,WAAI,iBAAiB;AACtD,IAAM,wBAA+B,WAAI,sBAAsB;AAC/D,IAAM,wBAA+B,WAAI,sBAAsB;AAC/D,IAAM,0BAAiC,WAAI,wBAAwB;AACnE,IAAM,kBAAyB,WAAI,sBAAsB;AACzD,IAAM,gBAAuB,WAAI,aAAa;AAC9C,IAAM,iBAAwB,WAAI,cAAc;AAChD,IAAM,aAAoB,WAAI,SAAS;AACvC,IAAM,eAAsB,WAAI,WAAW;AAC3C,IAAM,cAAqB,WAAI,WAAW;AAC1C,IAAM,cAAqB,WAAI,UAAU;AACzC,IAAM,iBAAwB,WAAI,cAAc;AAChD,IAAM,wBAA+B,WAAI,qBAAqB;AAC9D,IAAM,qBAA4B,WACjC,0EACD;AACA,IAAM,uBAA8B,WAAI,oBAAoB;AAE5D,IAAM,sBAA6B,WAAI,oBAAoB;AAC3D,IAAM,wBAA+B,WAAI,sBAAsB;",
8
- "debugId": "D51B1F012B867B6764756E2164756E21",
7
+ "mappings": ";AAAA;AAEA,IAAM,aAAoB,WAAI,SAAS;AACvC,IAAM,eAAsB,WAAI,YAAY;AAC5C,IAAM,oBAA2B,WAAI,iBAAiB;AACtD,IAAM,wBAA+B,WAAI,sBAAsB;AAC/D,IAAM,0BAAiC,WAAI,wBAAwB;AACnE,IAAM,kBAAyB,WAAI,sBAAsB;AACzD,IAAM,gBAAuB,WAAI,aAAa;AAC9C,IAAM,iBAAwB,WAAI,cAAc;AAChD,IAAM,aAAoB,WAAI,SAAS;AACvC,IAAM,eAAsB,WAAI,WAAW;AAC3C,IAAM,cAAqB,WAAI,WAAW;AAC1C,IAAM,cAAqB,WAAI,UAAU;AACzC,IAAM,iBAAwB,WAAI,cAAc;AAChD,IAAM,wBAA+B,WAAI,qBAAqB;AAC9D,IAAM,qBAA4B,WACjC,0EACD;AACA,IAAM,uBAA8B,WAAI,oBAAoB;AAC5D,IAAM,qBAA4B,WAAI,kBAAkB;AACxD,IAAM,uBAA8B,WAAI,qBAAqB;AAC7D,IAAM,yBAAgC,WAAI,uBAAuB;AACjE,IAAM,uBAA8B,WAAI,qBAAqB;AAC7D,IAAM,sBAA6B,WAAI,oBAAoB;AAC3D,IAAM,mBAA0B,WAAI,gBAAgB;AAEpD,IAAM,wBAA+B,WAAI,sBAAsB;",
8
+ "debugId": "9476780C10F3E50264756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -1,13 +1,19 @@
1
1
  import type { PciId } from "./contracts/pci";
2
- import { type Subject, type SubjectScope } from "./subject";
2
+ import { type Subject } from "./subject";
3
3
  declare const REQUIRED_PCIS_BY_SUBJECT: {
4
4
  readonly math: readonly ["urn:primer:pci:fraction-input"];
5
5
  readonly vocabulary: readonly [];
6
6
  readonly science: readonly [];
7
7
  };
8
- type RequiredPciForSubject<S extends SubjectScope> = S extends "all" ? (typeof REQUIRED_PCIS_BY_SUBJECT)[Subject][number] : S extends Subject ? (typeof REQUIRED_PCIS_BY_SUBJECT)[S][number] : never;
9
- declare function requiredPcisForSubject(subject: SubjectScope): readonly PciId[];
10
- declare function missingPcisForSubject(subject: SubjectScope, provided: readonly string[] | undefined): PciId[];
8
+ type RequiredPciForKnownSubject<S extends Subject> = (typeof REQUIRED_PCIS_BY_SUBJECT)[S][number];
9
+ type RequiredPciForAllSubjects = (typeof REQUIRED_PCIS_BY_SUBJECT)[Subject][number];
10
+ type RequiredPciForSubject<S extends Subject | undefined> = S extends undefined ? RequiredPciForAllSubjects : S extends Subject ? RequiredPciForKnownSubject<S> : never;
11
+ type MissingRequiredPcis<Required extends PciId, Supported extends readonly PciId[]> = Exclude<Required, Supported[number]>;
12
+ type HasRequiredPcis<Required extends PciId, Supported extends readonly PciId[]> = [
13
+ MissingRequiredPcis<Required, Supported>
14
+ ] extends [never] ? true : false;
15
+ declare function requiredPcisForSubject(subject: Subject | undefined): readonly PciId[];
16
+ declare function missingPcisForSubject(subject: Subject | undefined, provided: readonly string[] | undefined): PciId[];
11
17
  export { REQUIRED_PCIS_BY_SUBJECT, missingPcisForSubject, requiredPcisForSubject };
12
- export type { RequiredPciForSubject };
18
+ export type { HasRequiredPcis, MissingRequiredPcis, RequiredPciForSubject };
13
19
  //# sourceMappingURL=subject-pcis.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"subject-pcis.d.ts","sourceRoot":"","sources":["../src/subject-pcis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2CAA2C,CAAA;AACtE,OAAO,EAAY,KAAK,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,qCAAqC,CAAA;AAE/F,QAAA,MAAM,wBAAwB;;;;CAIwB,CAAA;AAEtD,KAAK,qBAAqB,CAAC,CAAC,SAAS,YAAY,IAAI,CAAC,SAAS,KAAK,GACjE,CAAC,OAAO,wBAAwB,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAClD,CAAC,SAAS,OAAO,GAChB,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAC5C,KAAK,CAAA;AAET,iBAAS,sBAAsB,CAAC,OAAO,EAAE,YAAY,GAAG,SAAS,KAAK,EAAE,CAavE;AAED,iBAAS,qBAAqB,CAC7B,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GACrC,KAAK,EAAE,CAST;AAED,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,CAAA;AAClF,YAAY,EAAE,qBAAqB,EAAE,CAAA"}
1
+ {"version":3,"file":"subject-pcis.d.ts","sourceRoot":"","sources":["../src/subject-pcis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2CAA2C,CAAA;AACtE,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,qCAAqC,CAAA;AAE5E,QAAA,MAAM,wBAAwB;;;;CAIwB,CAAA;AAEtD,KAAK,0BAA0B,CAAC,CAAC,SAAS,OAAO,IAAI,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;AACjG,KAAK,yBAAyB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAA;AACnF,KAAK,qBAAqB,CAAC,CAAC,SAAS,OAAO,GAAG,SAAS,IAAI,CAAC,SAAS,SAAS,GAC5E,yBAAyB,GACzB,CAAC,SAAS,OAAO,GAChB,0BAA0B,CAAC,CAAC,CAAC,GAC7B,KAAK,CAAA;AACT,KAAK,mBAAmB,CAAC,QAAQ,SAAS,KAAK,EAAE,SAAS,SAAS,SAAS,KAAK,EAAE,IAAI,OAAO,CAC7F,QAAQ,EACR,SAAS,CAAC,MAAM,CAAC,CACjB,CAAA;AACD,KAAK,eAAe,CAAC,QAAQ,SAAS,KAAK,EAAE,SAAS,SAAS,SAAS,KAAK,EAAE,IAAI;IAClF,mBAAmB,CAAC,QAAQ,EAAE,SAAS,CAAC;CACxC,SAAS,CAAC,KAAK,CAAC,GACd,IAAI,GACJ,KAAK,CAAA;AAER,iBAAS,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,KAAK,EAAE,CAa9E;AAED,iBAAS,qBAAqB,CAC7B,OAAO,EAAE,OAAO,GAAG,SAAS,EAC5B,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GACrC,KAAK,EAAE,CAST;AAED,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,CAAA;AAClF,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,CAAA"}
@@ -0,0 +1,39 @@
1
+ // src/subject.ts
2
+ var SUBJECTS = ["math", "vocabulary", "science"];
3
+ // src/subject-pcis.ts
4
+ var REQUIRED_PCIS_BY_SUBJECT = {
5
+ math: ["urn:primer:pci:fraction-input"],
6
+ vocabulary: [],
7
+ science: []
8
+ };
9
+ function requiredPcisForSubject(subject) {
10
+ if (subject === undefined) {
11
+ const all = [];
12
+ for (const s of SUBJECTS) {
13
+ for (const pci of REQUIRED_PCIS_BY_SUBJECT[s]) {
14
+ if (!all.includes(pci)) {
15
+ all.push(pci);
16
+ }
17
+ }
18
+ }
19
+ return all;
20
+ }
21
+ return REQUIRED_PCIS_BY_SUBJECT[subject];
22
+ }
23
+ function missingPcisForSubject(subject, provided) {
24
+ const required = requiredPcisForSubject(subject);
25
+ const missing = [];
26
+ for (const pci of required) {
27
+ if (provided === undefined || !provided.includes(pci)) {
28
+ missing.push(pci);
29
+ }
30
+ }
31
+ return missing;
32
+ }
33
+ export {
34
+ requiredPcisForSubject,
35
+ missingPcisForSubject,
36
+ REQUIRED_PCIS_BY_SUBJECT
37
+ };
38
+
39
+ //# debugId=1F65043574FED0F364756E2164756E21
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/subject.ts", "../src/subject-pcis.ts"],
4
+ "sourcesContent": [
5
+ "const SUBJECTS = [\"math\", \"vocabulary\", \"science\"] as const\n\ntype Subject = (typeof SUBJECTS)[number]\n\nexport { SUBJECTS }\nexport type { Subject }\n",
6
+ "import type { PciId } from \"@superbuilders/primer-tives/contracts/pci\"\nimport { SUBJECTS, type Subject } from \"@superbuilders/primer-tives/subject\"\n\nconst REQUIRED_PCIS_BY_SUBJECT = {\n\tmath: [\"urn:primer:pci:fraction-input\"],\n\tvocabulary: [],\n\tscience: []\n} as const satisfies Record<Subject, readonly PciId[]>\n\ntype RequiredPciForKnownSubject<S extends Subject> = (typeof REQUIRED_PCIS_BY_SUBJECT)[S][number]\ntype RequiredPciForAllSubjects = (typeof REQUIRED_PCIS_BY_SUBJECT)[Subject][number]\ntype RequiredPciForSubject<S extends Subject | undefined> = S extends undefined\n\t? RequiredPciForAllSubjects\n\t: S extends Subject\n\t\t? RequiredPciForKnownSubject<S>\n\t\t: never\ntype MissingRequiredPcis<Required extends PciId, Supported extends readonly PciId[]> = Exclude<\n\tRequired,\n\tSupported[number]\n>\ntype HasRequiredPcis<Required extends PciId, Supported extends readonly PciId[]> = [\n\tMissingRequiredPcis<Required, Supported>\n] extends [never]\n\t? true\n\t: false\n\nfunction requiredPcisForSubject(subject: Subject | undefined): readonly PciId[] {\n\tif (subject === undefined) {\n\t\tconst all: PciId[] = []\n\t\tfor (const s of SUBJECTS) {\n\t\t\tfor (const pci of REQUIRED_PCIS_BY_SUBJECT[s]) {\n\t\t\t\tif (!all.includes(pci)) {\n\t\t\t\t\tall.push(pci)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn all\n\t}\n\treturn REQUIRED_PCIS_BY_SUBJECT[subject]\n}\n\nfunction missingPcisForSubject(\n\tsubject: Subject | undefined,\n\tprovided: readonly string[] | undefined\n): PciId[] {\n\tconst required = requiredPcisForSubject(subject)\n\tconst missing: PciId[] = []\n\tfor (const pci of required) {\n\t\tif (provided === undefined || !provided.includes(pci)) {\n\t\t\tmissing.push(pci)\n\t\t}\n\t}\n\treturn missing\n}\n\nexport { REQUIRED_PCIS_BY_SUBJECT, missingPcisForSubject, requiredPcisForSubject }\nexport type { HasRequiredPcis, MissingRequiredPcis, RequiredPciForSubject }\n"
7
+ ],
8
+ "mappings": ";AAAA,IAAM,WAAW,CAAC,QAAQ,cAAc,SAAS;;ACGjD,IAAM,2BAA2B;AAAA,EAChC,MAAM,CAAC,+BAA+B;AAAA,EACtC,YAAY,CAAC;AAAA,EACb,SAAS,CAAC;AACX;AAmBA,SAAS,sBAAsB,CAAC,SAAgD;AAAA,EAC/E,IAAI,YAAY,WAAW;AAAA,IAC1B,MAAM,MAAe,CAAC;AAAA,IACtB,WAAW,KAAK,UAAU;AAAA,MACzB,WAAW,OAAO,yBAAyB,IAAI;AAAA,QAC9C,IAAI,CAAC,IAAI,SAAS,GAAG,GAAG;AAAA,UACvB,IAAI,KAAK,GAAG;AAAA,QACb;AAAA,MACD;AAAA,IACD;AAAA,IACA,OAAO;AAAA,EACR;AAAA,EACA,OAAO,yBAAyB;AAAA;AAGjC,SAAS,qBAAqB,CAC7B,SACA,UACU;AAAA,EACV,MAAM,WAAW,uBAAuB,OAAO;AAAA,EAC/C,MAAM,UAAmB,CAAC;AAAA,EAC1B,WAAW,OAAO,UAAU;AAAA,IAC3B,IAAI,aAAa,aAAa,CAAC,SAAS,SAAS,GAAG,GAAG;AAAA,MACtD,QAAQ,KAAK,GAAG;AAAA,IACjB;AAAA,EACD;AAAA,EACA,OAAO;AAAA;",
9
+ "debugId": "1F65043574FED0F364756E2164756E21",
10
+ "names": []
11
+ }
package/dist/subject.d.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  declare const SUBJECTS: readonly ["math", "vocabulary", "science"];
2
2
  type Subject = (typeof SUBJECTS)[number];
3
- type SubjectScope = Subject | "all";
4
3
  export { SUBJECTS };
5
- export type { Subject, SubjectScope };
4
+ export type { Subject };
6
5
  //# sourceMappingURL=subject.d.ts.map
@@ -1 +1 @@
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"}
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,OAAO,EAAE,QAAQ,EAAE,CAAA;AACnB,YAAY,EAAE,OAAO,EAAE,CAAA"}
@@ -2,7 +2,7 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/subject.ts"],
4
4
  "sourcesContent": [
5
- "const SUBJECTS = [\"math\", \"vocabulary\", \"science\"] as const\n\ntype Subject = (typeof SUBJECTS)[number]\n\ntype SubjectScope = Subject | \"all\"\n\nexport { SUBJECTS }\nexport type { Subject, SubjectScope }\n"
5
+ "const SUBJECTS = [\"math\", \"vocabulary\", \"science\"] as const\n\ntype Subject = (typeof SUBJECTS)[number]\n\nexport { SUBJECTS }\nexport type { Subject }\n"
6
6
  ],
7
7
  "mappings": ";AAAA,IAAM,WAAW,CAAC,QAAQ,cAAc,SAAS;",
8
8
  "debugId": "60AAA236541906F764756E2164756E21",
package/dist/version.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- declare const SDK_VERSION = "2.2.1";
1
+ declare const SDK_VERSION = "3.5.1";
2
2
  declare const NPM_PACKAGE_URL = "https://www.npmjs.com/package/@superbuilders/primer-tives";
3
3
  export { NPM_PACKAGE_URL, SDK_VERSION };
4
4
  //# sourceMappingURL=version.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@superbuilders/primer-tives",
3
- "version": "2.2.1",
3
+ "version": "3.5.1",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./client": {
@@ -23,10 +23,6 @@
23
23
  "types": "./dist/logger.d.ts",
24
24
  "import": "./dist/logger.js"
25
25
  },
26
- "./server": {
27
- "types": "./dist/server/index.d.ts",
28
- "import": "./dist/server/index.js"
29
- },
30
26
  "./subject": {
31
27
  "types": "./dist/subject.d.ts",
32
28
  "import": "./dist/subject.js"
@@ -46,7 +42,7 @@
46
42
  "scripts": {
47
43
  "build": "bun run build.ts",
48
44
  "prepublishOnly": "bun run build.ts",
49
- "typecheck": "bun --bun tsc --noEmit"
45
+ "typecheck": "bun --bun tsc --noEmit && bun --bun tsc --project tsconfig.type-tests.json --noEmit"
50
46
  },
51
47
  "devDependencies": {
52
48
  "resolve-tspaths": "^0.8.23"
@@ -1,17 +0,0 @@
1
- import type { PrimerLogger } from "../logger";
2
- import { type GetTokenInput } from "./exchange";
3
- interface PrimerServerConfig {
4
- readonly origin: string;
5
- readonly secretKey: string;
6
- readonly headers?: HeadersInit;
7
- readonly fetch?: typeof globalThis.fetch;
8
- readonly abort?: AbortController;
9
- readonly logger: PrimerLogger;
10
- }
11
- interface PrimerServer {
12
- getToken(input: GetTokenInput): Promise<string>;
13
- }
14
- declare function createPrimerServer(config: PrimerServerConfig): PrimerServer;
15
- export type { GetTokenInput, PrimerServer, PrimerServerConfig };
16
- export { createPrimerServer };
17
- //# sourceMappingURL=create-server.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-server.d.ts","sourceRoot":"","sources":["../../src/server/create-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAAE,KAAK,aAAa,EAAY,MAAM,6CAA6C,CAAA;AAE1F,UAAU,kBAAkB;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAA;IAC9B,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;AAED,UAAU,YAAY;IACrB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CAC/C;AAED,iBAAS,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,YAAY,CAMpE;AAED,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,kBAAkB,EAAE,CAAA;AAC/D,OAAO,EAAE,kBAAkB,EAAE,CAAA"}
@@ -1,16 +0,0 @@
1
- import type { PrimerLogger } from "../logger";
2
- interface TokenConfig {
3
- readonly origin: string;
4
- readonly secretKey: string;
5
- readonly headers?: HeadersInit;
6
- readonly fetch?: typeof globalThis.fetch;
7
- readonly abort?: AbortController;
8
- readonly logger: PrimerLogger;
9
- }
10
- type GetTokenInput = {
11
- readonly verifiedEmail: string;
12
- };
13
- declare function getToken(config: TokenConfig, input: GetTokenInput): Promise<string>;
14
- export type { GetTokenInput, TokenConfig };
15
- export { getToken };
16
- //# sourceMappingURL=exchange.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"exchange.d.ts","sourceRoot":"","sources":["../../src/server/exchange.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AAItE,UAAU,WAAW;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAA;IAC9B,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;AAED,KAAK,aAAa,GAAG;IACpB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;CAC9B,CAAA;AAsJD,iBAAe,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBlF;AAED,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,CAAA"}
@@ -1,3 +0,0 @@
1
- export { createPrimerServer } from "./create-server";
2
- export type { GetTokenInput, PrimerServer, PrimerServerConfig } from "./create-server";
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
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,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,MAAM,kDAAkD,CAAA"}
@@ -1,173 +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 ErrMissingRequiredPci = errors.new("missing required pci");
7
- var ErrInvalidAccessToken = errors.new("invalid access token");
8
- var ErrMalformedAccessToken = errors.new("malformed access token");
9
- var ErrTokenExpired = errors.new("access token expired");
10
- var ErrBadRequest = errors.new("bad request");
11
- var ErrServerError = errors.new("server error");
12
- var ErrTimeout = errors.new("timeout");
13
- var ErrForbidden = errors.new("forbidden");
14
- var ErrNotFound = errors.new("not found");
15
- var ErrConflict = errors.new("conflict");
16
- var ErrRateLimited = errors.new("rate limited");
17
- var ErrServiceUnavailable = errors.new("service unavailable");
18
- var ErrNotSerializable = errors.new("PrimerState is live in-memory state and must not be serialized or stored");
19
- var ErrInvalidSubmission = errors.new("invalid submission");
20
- var ErrInvalidSecretKey = errors.new("invalid secret key");
21
- var ErrSdkUpgradeRequired = errors.new("sdk upgrade required");
22
- // src/server/exchange.ts
23
- import * as errors2 from "@superbuilders/errors";
24
- var TOKEN_PATH = "/api/v0/sessions";
25
- var MAX_LOGGED_BODY_CHARS = 2000;
26
- function isObjectRecord(value) {
27
- return typeof value === "object" && value !== null;
28
- }
29
- function toTokenErrorBody(data) {
30
- if (!isObjectRecord(data)) {
31
- return {};
32
- }
33
- return typeof data.error === "string" ? { error: data.error } : {};
34
- }
35
- function truncateBody(text) {
36
- if (text.length <= MAX_LOGGED_BODY_CHARS) {
37
- return text;
38
- }
39
- return text.slice(0, MAX_LOGGED_BODY_CHARS);
40
- }
41
- function parseTokenSuccessBody(data) {
42
- if (!isObjectRecord(data)) {
43
- return;
44
- }
45
- if (typeof data.access_token !== "string" || data.token_type !== "Bearer") {
46
- return;
47
- }
48
- return {
49
- access_token: data.access_token,
50
- token_type: "Bearer"
51
- };
52
- }
53
- function isAbortError(err) {
54
- return err.name === "AbortError" || err.name === "TimeoutError";
55
- }
56
- function httpSentinel(status) {
57
- if (status === 400) {
58
- return ErrBadRequest;
59
- }
60
- if (status === 401) {
61
- return ErrInvalidSecretKey;
62
- }
63
- return ErrServerError;
64
- }
65
- async function readErrorBody(res) {
66
- const contentType = res.headers.get("content-type");
67
- const textResult = await res.text().then(function ok(text) {
68
- return { ok: true, text };
69
- }, function fail(err) {
70
- return { ok: false, error: err };
71
- });
72
- if (!textResult.ok) {
73
- return { contentType: contentType === null ? undefined : contentType };
74
- }
75
- const rawText = truncateBody(textResult.text);
76
- const parsed = errors2.trySync(function parseJson() {
77
- return JSON.parse(textResult.text);
78
- });
79
- if (parsed.error) {
80
- return { rawText, contentType: contentType === null ? undefined : contentType };
81
- }
82
- const body = toTokenErrorBody(parsed.data);
83
- return { ...body, rawText, contentType: contentType === null ? undefined : contentType };
84
- }
85
- async function sendTokenRequest(config, input) {
86
- const logger = config.logger;
87
- const fetchFn = config.fetch ? config.fetch : globalThis.fetch;
88
- const signal = config.abort ? config.abort.signal : undefined;
89
- const url = `${config.origin}${TOKEN_PATH}`;
90
- const headers = new Headers(config.headers);
91
- headers.set("Content-Type", "application/json");
92
- headers.set("Authorization", `Bearer ${config.secretKey}`);
93
- const hasProtectionBypass = headers.has("x-vercel-protection-bypass");
94
- logger.debug("token request dispatch", {
95
- url,
96
- hasProtectionBypass,
97
- hasAbortSignal: signal !== undefined
98
- });
99
- const fetchResult = await fetchFn(url, {
100
- method: "POST",
101
- headers,
102
- body: JSON.stringify({ verified_email: input.verifiedEmail }),
103
- signal
104
- }).then(function ok(response) {
105
- return { ok: true, response };
106
- }, function fail(err) {
107
- return { ok: false, error: err };
108
- });
109
- if (!fetchResult.ok) {
110
- if (isAbortError(fetchResult.error)) {
111
- logger.error("token request timeout");
112
- throw errors2.wrap(ErrTimeout, fetchResult.error.message);
113
- }
114
- logger.error("token request network error", { error: fetchResult.error });
115
- throw errors2.wrap(ErrNetwork, fetchResult.error.message);
116
- }
117
- return fetchResult.response;
118
- }
119
- async function parseToken(config, res) {
120
- const logger = config.logger;
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
- logger.error("token response json parse failed", { error: jsonResult.error });
128
- throw errors2.wrap(ErrJsonParse, jsonResult.error.message);
129
- }
130
- const body = parseTokenSuccessBody(jsonResult.data);
131
- if (body === undefined) {
132
- logger.error("token response had invalid shape", { body: jsonResult.data });
133
- throw errors2.wrap(ErrJsonParse, "token response had invalid shape");
134
- }
135
- logger.debug("token request success");
136
- return body.access_token;
137
- }
138
- async function getToken(config, input) {
139
- const logger = config.logger;
140
- logger.debug("token request", {
141
- origin: config.origin,
142
- verifiedEmail: input.verifiedEmail,
143
- hasCustomHeaders: config.headers !== undefined
144
- });
145
- const res = await sendTokenRequest(config, input);
146
- if (!res.ok) {
147
- const body = await readErrorBody(res);
148
- const sentinel = httpSentinel(res.status);
149
- const detail = body.error ? `${res.status} ${body.error}` : `${res.status}`;
150
- logger.error("token request http error", {
151
- status: res.status,
152
- body,
153
- origin: config.origin,
154
- verifiedEmail: input.verifiedEmail
155
- });
156
- throw errors2.wrap(sentinel, detail);
157
- }
158
- return parseToken(config, res);
159
- }
160
-
161
- // src/server/create-server.ts
162
- function createPrimerServer(config) {
163
- return {
164
- getToken(input) {
165
- return getToken(config, input);
166
- }
167
- };
168
- }
169
- export {
170
- createPrimerServer
171
- };
172
-
173
- //# debugId=33FD60F3187C394264756E2164756E21
@@ -1,12 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/errors.ts", "../src/server/exchange.ts", "../src/server/create-server.ts"],
4
- "sourcesContent": [
5
- "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 ErrMissingRequiredPci = errors.new(\"missing required 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 ErrSdkUpgradeRequired = errors.new(\"sdk upgrade required\")\n\nexport {\n\tErrBadRequest,\n\tErrConflict,\n\tErrForbidden,\n\tErrInvalidAccessToken,\n\tErrInvalidSecretKey,\n\tErrInvalidSubmission,\n\tErrJsonParse,\n\tErrMalformedAccessToken,\n\tErrMissingRequiredPci,\n\tErrNetwork,\n\tErrNotFound,\n\tErrNotSerializable,\n\tErrRateLimited,\n\tErrSdkUpgradeRequired,\n\tErrServerError,\n\tErrServiceUnavailable,\n\tErrTimeout,\n\tErrTokenExpired,\n\tErrUnsupportedPci\n}\n",
6
- "import * as errors from \"@superbuilders/errors\"\nimport {\n\tErrBadRequest,\n\tErrInvalidSecretKey,\n\tErrJsonParse,\n\tErrNetwork,\n\tErrServerError,\n\tErrTimeout\n} from \"@superbuilders/primer-tives/errors\"\nimport type { PrimerLogger } from \"@superbuilders/primer-tives/logger\"\n\nconst TOKEN_PATH = \"/api/v0/sessions\"\n\ninterface TokenConfig {\n\treadonly origin: string\n\treadonly secretKey: string\n\treadonly headers?: HeadersInit\n\treadonly fetch?: typeof globalThis.fetch\n\treadonly abort?: AbortController\n\treadonly logger: PrimerLogger\n}\n\ntype GetTokenInput = {\n\treadonly verifiedEmail: string\n}\n\ninterface TokenSuccessBody {\n\taccess_token: string\n\ttoken_type: \"Bearer\"\n}\n\ninterface TokenErrorBody {\n\treadonly error?: string\n\treadonly rawText?: string\n\treadonly contentType?: string\n}\n\nconst MAX_LOGGED_BODY_CHARS = 2_000\n\nfunction isObjectRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null\n}\n\nfunction toTokenErrorBody(data: unknown): TokenErrorBody {\n\tif (!isObjectRecord(data)) {\n\t\treturn {}\n\t}\n\treturn typeof data.error === \"string\" ? { error: data.error } : {}\n}\n\nfunction truncateBody(text: string): string {\n\tif (text.length <= MAX_LOGGED_BODY_CHARS) {\n\t\treturn text\n\t}\n\treturn text.slice(0, MAX_LOGGED_BODY_CHARS)\n}\n\nfunction parseTokenSuccessBody(data: unknown): TokenSuccessBody | undefined {\n\tif (!isObjectRecord(data)) {\n\t\treturn undefined\n\t}\n\tif (typeof data.access_token !== \"string\" || data.token_type !== \"Bearer\") {\n\t\treturn undefined\n\t}\n\treturn {\n\t\taccess_token: data.access_token,\n\t\ttoken_type: \"Bearer\"\n\t}\n}\n\nfunction isAbortError(err: Error): boolean {\n\treturn err.name === \"AbortError\" || err.name === \"TimeoutError\"\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\treturn ErrServerError\n}\n\nasync function readErrorBody(res: Response): Promise<TokenErrorBody> {\n\tconst contentType = res.headers.get(\"content-type\")\n\tconst textResult = await res.text().then(\n\t\tfunction ok(text: string) {\n\t\t\treturn { ok: true, text } 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\tif (!textResult.ok) {\n\t\treturn { contentType: contentType === null ? undefined : contentType }\n\t}\n\tconst rawText = truncateBody(textResult.text)\n\tconst parsed = errors.trySync(function parseJson(): unknown {\n\t\treturn JSON.parse(textResult.text)\n\t})\n\tif (parsed.error) {\n\t\treturn { rawText, contentType: contentType === null ? undefined : contentType }\n\t}\n\tconst body = toTokenErrorBody(parsed.data)\n\treturn { ...body, rawText, contentType: contentType === null ? undefined : contentType }\n}\n\nasync function sendTokenRequest(config: TokenConfig, input: GetTokenInput): Promise<Response> {\n\tconst logger = config.logger\n\tconst fetchFn = config.fetch ? config.fetch : globalThis.fetch\n\tconst signal = config.abort ? config.abort.signal : undefined\n\tconst url = `${config.origin}${TOKEN_PATH}`\n\tconst headers = new Headers(config.headers)\n\theaders.set(\"Content-Type\", \"application/json\")\n\theaders.set(\"Authorization\", `Bearer ${config.secretKey}`)\n\tconst hasProtectionBypass = headers.has(\"x-vercel-protection-bypass\")\n\tlogger.debug(\"token request dispatch\", {\n\t\turl,\n\t\thasProtectionBypass,\n\t\thasAbortSignal: signal !== undefined\n\t})\n\n\tconst fetchResult = await fetchFn(url, {\n\t\tmethod: \"POST\",\n\t\theaders,\n\t\tbody: JSON.stringify({ verified_email: input.verifiedEmail }),\n\t\tsignal\n\t}).then(\n\t\tfunction ok(response: Response) {\n\t\t\treturn { ok: true, response } 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\tlogger.error(\"token request timeout\")\n\t\t\tthrow errors.wrap(ErrTimeout, fetchResult.error.message)\n\t\t}\n\t\tlogger.error(\"token request network error\", { error: fetchResult.error })\n\t\tthrow errors.wrap(ErrNetwork, fetchResult.error.message)\n\t}\n\n\treturn fetchResult.response\n}\n\nasync function parseToken(config: TokenConfig, res: Response): Promise<string> {\n\tconst logger = config.logger\n\tconst jsonResult = await res.json().then(\n\t\tfunction ok(data: unknown) {\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\tif (!jsonResult.ok) {\n\t\tlogger.error(\"token response json parse failed\", { error: jsonResult.error })\n\t\tthrow errors.wrap(ErrJsonParse, jsonResult.error.message)\n\t}\n\n\tconst body = parseTokenSuccessBody(jsonResult.data)\n\tif (body === undefined) {\n\t\tlogger.error(\"token response had invalid shape\", { body: jsonResult.data })\n\t\tthrow errors.wrap(ErrJsonParse, \"token response had invalid shape\")\n\t}\n\n\tlogger.debug(\"token request success\")\n\treturn body.access_token\n}\n\nasync function getToken(config: TokenConfig, input: GetTokenInput): Promise<string> {\n\tconst logger = config.logger\n\tlogger.debug(\"token request\", {\n\t\torigin: config.origin,\n\t\tverifiedEmail: input.verifiedEmail,\n\t\thasCustomHeaders: config.headers !== undefined\n\t})\n\n\tconst res = await sendTokenRequest(config, input)\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\tlogger.error(\"token request http error\", {\n\t\t\tstatus: res.status,\n\t\t\tbody,\n\t\t\torigin: config.origin,\n\t\t\tverifiedEmail: input.verifiedEmail\n\t\t})\n\t\tthrow errors.wrap(sentinel, detail)\n\t}\n\n\treturn parseToken(config, res)\n}\n\nexport type { GetTokenInput, TokenConfig }\nexport { getToken }\n",
7
- "import type { PrimerLogger } from \"@superbuilders/primer-tives/logger\"\nimport { type GetTokenInput, getToken } from \"@superbuilders/primer-tives/server/exchange\"\n\ninterface PrimerServerConfig {\n\treadonly origin: string\n\treadonly secretKey: string\n\treadonly headers?: HeadersInit\n\treadonly fetch?: typeof globalThis.fetch\n\treadonly abort?: AbortController\n\treadonly logger: PrimerLogger\n}\n\ninterface PrimerServer {\n\tgetToken(input: GetTokenInput): Promise<string>\n}\n\nfunction createPrimerServer(config: PrimerServerConfig): PrimerServer {\n\treturn {\n\t\tgetToken(input): Promise<string> {\n\t\t\treturn getToken(config, input)\n\t\t}\n\t}\n}\n\nexport type { GetTokenInput, PrimerServer, PrimerServerConfig }\nexport { createPrimerServer }\n"
8
- ],
9
- "mappings": "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",
10
- "debugId": "33FD60F3187C394264756E2164756E21",
11
- "names": []
12
- }