@grest-ts/oauth 0.0.0-stage → 0.0.90

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 (53) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +165 -2
  3. package/dist/src/_dedupCheck.d.ts +2 -0
  4. package/dist/src/_dedupCheck.d.ts.map +1 -0
  5. package/dist/src/_dedupCheck.js +28 -0
  6. package/dist/src/_dedupCheck.js.map +1 -0
  7. package/dist/src/browser/GGOAuthClient.d.ts +50 -0
  8. package/dist/src/browser/GGOAuthClient.d.ts.map +1 -0
  9. package/dist/src/browser/GGOAuthClient.js +152 -0
  10. package/dist/src/browser/GGOAuthClient.js.map +1 -0
  11. package/dist/src/index-browser.d.ts +6 -0
  12. package/dist/src/index-browser.d.ts.map +1 -0
  13. package/dist/src/index-browser.js +4 -0
  14. package/dist/src/index-browser.js.map +1 -0
  15. package/dist/src/index-node.d.ts +8 -0
  16. package/dist/src/index-node.d.ts.map +1 -0
  17. package/dist/src/index-node.js +5 -0
  18. package/dist/src/index-node.js.map +1 -0
  19. package/dist/src/node/GGOAuthServer.d.ts +72 -0
  20. package/dist/src/node/GGOAuthServer.d.ts.map +1 -0
  21. package/dist/src/node/GGOAuthServer.js +430 -0
  22. package/dist/src/node/GGOAuthServer.js.map +1 -0
  23. package/dist/src/node/store/DynamoOAuthStore.d.ts +28 -0
  24. package/dist/src/node/store/DynamoOAuthStore.d.ts.map +1 -0
  25. package/dist/src/node/store/DynamoOAuthStore.js +78 -0
  26. package/dist/src/node/store/DynamoOAuthStore.js.map +1 -0
  27. package/dist/src/node/store/GGOAuthStore.d.ts +18 -0
  28. package/dist/src/node/store/GGOAuthStore.d.ts.map +1 -0
  29. package/dist/src/node/store/GGOAuthStore.js +16 -0
  30. package/dist/src/node/store/GGOAuthStore.js.map +1 -0
  31. package/dist/src/node/store/InMemoryOAuthStore.d.ts +16 -0
  32. package/dist/src/node/store/InMemoryOAuthStore.d.ts.map +1 -0
  33. package/dist/src/node/store/InMemoryOAuthStore.js +44 -0
  34. package/dist/src/node/store/InMemoryOAuthStore.js.map +1 -0
  35. package/dist/src/shared/interactionContract.d.ts +77 -0
  36. package/dist/src/shared/interactionContract.d.ts.map +1 -0
  37. package/dist/src/shared/interactionContract.js +34 -0
  38. package/dist/src/shared/interactionContract.js.map +1 -0
  39. package/dist/src/tsconfig.json +18 -0
  40. package/dist/tsconfig.publish.tsbuildinfo +1 -0
  41. package/package.json +71 -4
  42. package/src/_dedupCheck.ts +29 -0
  43. package/src/browser/GGOAuthClient.test.ts +76 -0
  44. package/src/browser/GGOAuthClient.ts +187 -0
  45. package/src/index-browser.ts +5 -0
  46. package/src/index-node.ts +7 -0
  47. package/src/node/GGOAuthServer.test.ts +416 -0
  48. package/src/node/GGOAuthServer.ts +500 -0
  49. package/src/node/store/DynamoOAuthStore.ts +93 -0
  50. package/src/node/store/GGOAuthStore.ts +41 -0
  51. package/src/node/store/InMemoryOAuthStore.ts +54 -0
  52. package/src/shared/interactionContract.ts +39 -0
  53. package/src/tsconfig.json +18 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GGOAuthStore.js","sourceRoot":"","sources":["../../../../src/node/store/GGOAuthStore.ts"],"names":[],"mappings":"AA0BA,qEAAqE;AACrE,MAAM,UAAU,aAAa,CAAC,KAAmB;IAC7C,OAAO,MAAM,cAAc;QACN,KAAK,CAAQ;QAC9B,YAAY,KAAa,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA,CAAC,CAAC;QACjD,MAAM,GAAG,CAAC,EAAU,EAAE,OAAuB,EAAE,SAAkB,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,CAAA;QACtH,IAAI,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QACjD,SAAS,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QAC7D,gCAAgC;QAChC,cAAc,GAAG,KAAK,IAAI,EAAE,CAAC,SAAS,CAAA;QACtC,OAAO,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QACvD,OAAO,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QACvD,eAAe,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;KACxE,CAAA;AACL,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { GGOAuthPayload, GGOAuthStore } from "./GGOAuthStore";
2
+ export declare class InMemoryOAuthStore implements GGOAuthStore {
3
+ private readonly rows;
4
+ private readonly now;
5
+ constructor(now?: () => number);
6
+ upsert: (model: string, id: string, payload: GGOAuthPayload, expiresInSec: number | undefined) => Promise<void>;
7
+ find: (model: string, id: string) => Promise<GGOAuthPayload | undefined>;
8
+ findByUid: (model: string, uid: string) => Promise<GGOAuthPayload | undefined>;
9
+ consume: (model: string, id: string) => Promise<void>;
10
+ destroy: (model: string, id: string) => Promise<void>;
11
+ revokeByGrantId: (grantId: string) => Promise<void>;
12
+ listIdsByAccount: (model: string, accountId: string) => Promise<string[]>;
13
+ private findWhere;
14
+ private live;
15
+ }
16
+ //# sourceMappingURL=InMemoryOAuthStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InMemoryOAuthStore.d.ts","sourceRoot":"","sources":["../../../../src/node/store/InMemoryOAuthStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,cAAc,EAAE,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAKhE,qBAAa,kBAAmB,YAAW,YAAY;IAEnD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAyB;IAE9C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;gBAEtB,GAAG,GAAE,MAAM,MAAiB;IAIjC,MAAM,GAAU,OAAO,MAAM,EAAE,IAAI,MAAM,EAAE,SAAS,cAAc,EAAE,cAAc,MAAM,GAAG,SAAS,KAAG,OAAO,CAAC,IAAI,CAAC,CAE1H;IAEM,IAAI,GAAU,OAAO,MAAM,EAAE,IAAI,MAAM,KAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAuD;IAEpI,SAAS,GAAU,OAAO,MAAM,EAAE,KAAK,MAAM,yCAA8C;IAE3F,OAAO,GAAU,OAAO,MAAM,EAAE,IAAI,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAQhE;IAEM,OAAO,GAAU,OAAO,MAAM,EAAE,IAAI,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAEhE;IAEM,eAAe,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAE9D;IAEM,gBAAgB,GAAU,OAAO,MAAM,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CACyC;IAE9H,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,IAAI;CAGf"}
@@ -0,0 +1,44 @@
1
+ import { errors as oidcErrors } from "oidc-provider";
2
+ // Single-process only (tests, local dev): state is lost on restart and not shared across instances.
3
+ export class InMemoryOAuthStore {
4
+ rows = new Map();
5
+ now;
6
+ constructor(now = Date.now) {
7
+ this.now = now;
8
+ }
9
+ upsert = async (model, id, payload, expiresInSec) => {
10
+ this.rows.set(`${model}:${id}`, { model, id, payload, expiresAt: expiresInSec ? this.now() + expiresInSec * 1000 : undefined });
11
+ };
12
+ find = async (model, id) => this.live(this.rows.get(`${model}:${id}`))?.payload;
13
+ findByUid = async (model, uid) => this.findWhere(model, p => p.uid === uid);
14
+ consume = async (model, id) => {
15
+ const row = this.rows.get(`${model}:${id}`);
16
+ if (!row) {
17
+ if (model === "AuthorizationCode" || model === "RefreshToken")
18
+ throw new oidcErrors.InvalidGrant(`${model} revoked`);
19
+ return;
20
+ }
21
+ if (row.payload.consumed !== undefined)
22
+ throw new oidcErrors.InvalidGrant(`${model} already used`);
23
+ row.payload = { ...row.payload, consumed: Math.floor(this.now() / 1000) };
24
+ };
25
+ destroy = async (model, id) => {
26
+ this.rows.delete(`${model}:${id}`);
27
+ };
28
+ revokeByGrantId = async (grantId) => {
29
+ for (const [key, row] of this.rows)
30
+ if (row.payload.grantId === grantId)
31
+ this.rows.delete(key);
32
+ };
33
+ listIdsByAccount = async (model, accountId) => [...this.rows.values()].filter(r => r.model === model && this.live(r) && r.payload.accountId === accountId).map(r => r.id);
34
+ findWhere(model, match) {
35
+ for (const row of this.rows.values())
36
+ if (row.model === model && this.live(row) && match(row.payload))
37
+ return row.payload;
38
+ return undefined;
39
+ }
40
+ live(row) {
41
+ return row && (row.expiresAt === undefined || row.expiresAt > this.now()) ? row : undefined;
42
+ }
43
+ }
44
+ //# sourceMappingURL=InMemoryOAuthStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InMemoryOAuthStore.js","sourceRoot":"","sources":["../../../../src/node/store/InMemoryOAuthStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import { GGContractClass } from "@grest-ts/schema";
2
+ export declare const IsGGOAuthInteractionClient: import("@grest-ts/schema").ObjectSchema<{
3
+ clientId: string;
4
+ name: string;
5
+ firstParty: boolean;
6
+ redirectHosts: string[];
7
+ loopbackOnly: boolean;
8
+ }>;
9
+ export type GGOAuthInteractionClient = typeof IsGGOAuthInteractionClient.infer;
10
+ export declare const IsGGOAuthInteraction: import("@grest-ts/schema").ObjectSchema<{
11
+ uid: string;
12
+ client: {
13
+ clientId: string;
14
+ name: string;
15
+ firstParty: boolean;
16
+ redirectHosts: string[];
17
+ loopbackOnly: boolean;
18
+ };
19
+ scopes: string[];
20
+ resource: string;
21
+ }>;
22
+ export type GGOAuthInteraction = typeof IsGGOAuthInteraction.infer;
23
+ /**
24
+ * The app's login/consent page talks to this. Bind it with the app's own user wire — the
25
+ * signed-in user becomes the OAuth subject — e.g.
26
+ * new GGHttpSchema({contract: GGOAuthInteractionContract, pathPrefix: "api/oauth/interaction", use: [USER_WIRE], routes: {...}})
27
+ */
28
+ export declare const GGOAuthInteractionContract: GGContractClass<{
29
+ get: {
30
+ input: import("@grest-ts/schema").ObjectSchema<{
31
+ uid: string;
32
+ }>;
33
+ success: import("@grest-ts/schema").ObjectSchema<{
34
+ uid: string;
35
+ client: {
36
+ clientId: string;
37
+ name: string;
38
+ firstParty: boolean;
39
+ redirectHosts: string[];
40
+ loopbackOnly: boolean;
41
+ };
42
+ scopes: string[];
43
+ resource: string;
44
+ }>;
45
+ errors: (import("@grest-ts/schema").ERR_CLASS<"NOT_FOUND"> | import("@grest-ts/schema").ERR_CLASS<"NOT_AUTHORIZED"> | import("@grest-ts/schema").ERR_CLASS<"SERVER_ERROR">)[];
46
+ permission: Readonly<{
47
+ readonly __permission: "none";
48
+ }>;
49
+ };
50
+ /** The signed-in user approves: the browser then follows redirectUrl to receive the code. */
51
+ approve: {
52
+ input: import("@grest-ts/schema").ObjectSchema<{
53
+ uid: string;
54
+ }>;
55
+ success: import("@grest-ts/schema").ObjectSchema<{
56
+ redirectUrl: string;
57
+ }>;
58
+ errors: (import("@grest-ts/schema").ERR_CLASS<"NOT_FOUND"> | import("@grest-ts/schema").ERR_CLASS<"NOT_AUTHORIZED"> | import("@grest-ts/schema").ERR_CLASS<"SERVER_ERROR"> | import("@grest-ts/schema").ERR_CLASS<"FORBIDDEN">)[];
59
+ permission: Readonly<{
60
+ readonly __permission: "none";
61
+ }>;
62
+ };
63
+ /** The user declines: the client receives access_denied. */
64
+ deny: {
65
+ input: import("@grest-ts/schema").ObjectSchema<{
66
+ uid: string;
67
+ }>;
68
+ success: import("@grest-ts/schema").ObjectSchema<{
69
+ redirectUrl: string;
70
+ }>;
71
+ errors: (import("@grest-ts/schema").ERR_CLASS<"NOT_FOUND"> | import("@grest-ts/schema").ERR_CLASS<"NOT_AUTHORIZED"> | import("@grest-ts/schema").ERR_CLASS<"SERVER_ERROR">)[];
72
+ permission: Readonly<{
73
+ readonly __permission: "none";
74
+ }>;
75
+ };
76
+ }>;
77
+ //# sourceMappingURL=interactionContract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactionContract.d.ts","sourceRoot":"","sources":["../../../src/shared/interactionContract.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,eAAe,EAAkF,MAAM,kBAAkB,CAAA;AAE/J,eAAO,MAAM,0BAA0B;;;;;;EASrC,CAAA;AACF,MAAM,MAAM,wBAAwB,GAAG,OAAO,0BAA0B,CAAC,KAAK,CAAA;AAE9E,eAAO,MAAM,oBAAoB;;;;;;;;;;;EAM/B,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,OAAO,oBAAoB,CAAC,KAAK,CAAA;AAMlE;;;;GAIG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;IAEnC,6FAA6F;;;;;;;;;;;;;IAE7F,4DAA4D;;;;;;;;;;;;;EAE9D,CAAA"}
@@ -0,0 +1,34 @@
1
+ import { FORBIDDEN, GG_NO_PERMISSIONS, GGContractClass, IsArray, IsBoolean, IsObject, IsString, NOT_AUTHORIZED, NOT_FOUND, SERVER_ERROR } from "@grest-ts/schema";
2
+ export const IsGGOAuthInteractionClient = IsObject({
3
+ clientId: IsString,
4
+ name: IsString,
5
+ /** Pre-registered by the app (its own UI/CLI). Third-party clients must be shown a consent screen. */
6
+ firstParty: IsBoolean,
7
+ /** Hosts the authorization code is sent to — show these on the consent screen. */
8
+ redirectHosts: IsArray(IsString),
9
+ /** Every redirect is a loopback address: any local process could be posing as this client. */
10
+ loopbackOnly: IsBoolean,
11
+ });
12
+ export const IsGGOAuthInteraction = IsObject({
13
+ uid: IsString,
14
+ client: IsGGOAuthInteractionClient,
15
+ scopes: IsArray(IsString),
16
+ /** The resource (API) the client asks for access to. */
17
+ resource: IsString,
18
+ });
19
+ const IsUid = IsObject({ uid: IsString.nonEmpty });
20
+ /** Where the browser must navigate next: back to the authorization server, which finishes the flow. */
21
+ const IsRedirect = IsObject({ redirectUrl: IsString });
22
+ /**
23
+ * The app's login/consent page talks to this. Bind it with the app's own user wire — the
24
+ * signed-in user becomes the OAuth subject — e.g.
25
+ * new GGHttpSchema({contract: GGOAuthInteractionContract, pathPrefix: "api/oauth/interaction", use: [USER_WIRE], routes: {...}})
26
+ */
27
+ export const GGOAuthInteractionContract = new GGContractClass("GGOAuthInteraction", {
28
+ get: { input: IsUid, success: IsGGOAuthInteraction, errors: [NOT_FOUND, NOT_AUTHORIZED, SERVER_ERROR], permission: GG_NO_PERMISSIONS },
29
+ /** The signed-in user approves: the browser then follows redirectUrl to receive the code. */
30
+ approve: { input: IsUid, success: IsRedirect, errors: [NOT_FOUND, NOT_AUTHORIZED, FORBIDDEN, SERVER_ERROR], permission: GG_NO_PERMISSIONS },
31
+ /** The user declines: the client receives access_denied. */
32
+ deny: { input: IsUid, success: IsRedirect, errors: [NOT_FOUND, NOT_AUTHORIZED, SERVER_ERROR], permission: GG_NO_PERMISSIONS },
33
+ });
34
+ //# sourceMappingURL=interactionContract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactionContract.js","sourceRoot":"","sources":["../../../src/shared/interactionContract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,iBAAiB,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAC,MAAM,kBAAkB,CAAA;AAE/J,MAAM,CAAC,MAAM,0BAA0B,GAAG,QAAQ,CAAC;IAC/C,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,QAAQ;IACd,sGAAsG;IACtG,UAAU,EAAE,SAAS;IACrB,kFAAkF;IAClF,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC;IAChC,8FAA8F;IAC9F,YAAY,EAAE,SAAS;CAC1B,CAAC,CAAA;AAGF,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IACzC,GAAG,EAAE,QAAQ;IACb,MAAM,EAAE,0BAA0B;IAClC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC;IACzB,wDAAwD;IACxD,QAAQ,EAAE,QAAQ;CACrB,CAAC,CAAA;AAGF,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAC,GAAG,EAAE,QAAQ,CAAC,QAAQ,EAAC,CAAC,CAAA;AAChD,uGAAuG;AACvG,MAAM,UAAU,GAAG,QAAQ,CAAC,EAAC,WAAW,EAAE,QAAQ,EAAC,CAAC,CAAA;AAEpD;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,eAAe,CAAC,oBAAoB,EAAE;IAChF,GAAG,EAAE,EAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,YAAY,CAAC,EAAE,UAAU,EAAE,iBAAiB,EAAC;IACpI,6FAA6F;IAC7F,OAAO,EAAE,EAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,UAAU,EAAE,iBAAiB,EAAC;IACzI,4DAA4D;IAC5D,IAAI,EAAE,EAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,YAAY,CAAC,EAAE,UAAU,EAAE,iBAAiB,EAAC;CAC9H,CAAC,CAAA"}
@@ -0,0 +1,18 @@
1
+ {
2
+ "//": "THIS FILE IS GENERATED - DO NOT EDIT",
3
+ "extends": "../../../../tsconfig.base.json",
4
+ "compilerOptions": {
5
+ "rootDir": ".",
6
+ "lib": [
7
+ "ES2022",
8
+ "DOM"
9
+ ],
10
+ "types": [
11
+ "node",
12
+ "vitest/globals"
13
+ ]
14
+ },
15
+ "include": [
16
+ "**/*"
17
+ ]
18
+ }