@sasjs/api 0.2.1 → 0.3.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 (49) hide show
  1. package/README.md +36 -8
  2. package/build/browser.js +804 -4
  3. package/build/cjs/corpus/identity.js +268 -0
  4. package/build/cjs/corpus/runner.js +11 -2
  5. package/build/cjs/host/dispatch.js +57 -2
  6. package/build/cjs/identity/fixture.js +118 -0
  7. package/build/cjs/identity/memory-store.js +195 -0
  8. package/build/cjs/identity/service.js +153 -0
  9. package/build/cjs/identity/types.js +11 -0
  10. package/build/cjs/index.js +11 -1
  11. package/build/cjs/routes/generated.js +72 -0
  12. package/build/cjs/routes/index.js +6 -0
  13. package/build/cjs/routes/overlay.js +38 -0
  14. package/build/esm/corpus/drive.d.ts +14 -0
  15. package/build/esm/corpus/drive.d.ts.map +1 -1
  16. package/build/esm/corpus/identity.d.ts +17 -0
  17. package/build/esm/corpus/identity.d.ts.map +1 -0
  18. package/build/esm/corpus/identity.js +265 -0
  19. package/build/esm/corpus/runner.d.ts +6 -1
  20. package/build/esm/corpus/runner.d.ts.map +1 -1
  21. package/build/esm/corpus/runner.js +11 -2
  22. package/build/esm/host/dispatch.d.ts +16 -0
  23. package/build/esm/host/dispatch.d.ts.map +1 -1
  24. package/build/esm/host/dispatch.js +57 -2
  25. package/build/esm/identity/fixture.d.ts +84 -0
  26. package/build/esm/identity/fixture.d.ts.map +1 -0
  27. package/build/esm/identity/fixture.js +114 -0
  28. package/build/esm/identity/memory-store.d.ts +61 -0
  29. package/build/esm/identity/memory-store.d.ts.map +1 -0
  30. package/build/esm/identity/memory-store.js +191 -0
  31. package/build/esm/identity/service.d.ts +48 -0
  32. package/build/esm/identity/service.d.ts.map +1 -0
  33. package/build/esm/identity/service.js +148 -0
  34. package/build/esm/identity/types.d.ts +79 -0
  35. package/build/esm/identity/types.d.ts.map +1 -0
  36. package/build/esm/identity/types.js +10 -0
  37. package/build/esm/index.d.ts +7 -0
  38. package/build/esm/index.d.ts.map +1 -1
  39. package/build/esm/index.js +4 -0
  40. package/build/esm/routes/generated.d.ts.map +1 -1
  41. package/build/esm/routes/generated.js +72 -0
  42. package/build/esm/routes/index.d.ts.map +1 -1
  43. package/build/esm/routes/index.js +6 -0
  44. package/build/esm/routes/overlay.d.ts +9 -0
  45. package/build/esm/routes/overlay.d.ts.map +1 -1
  46. package/build/esm/routes/overlay.js +38 -0
  47. package/build/esm/types.d.ts +11 -0
  48. package/build/esm/types.d.ts.map +1 -1
  49. package/package.json +1 -1
@@ -84,6 +84,10 @@ export const GENERATED_ROUTES = [
84
84
  {
85
85
  status: 204,
86
86
  description: 'No content'
87
+ },
88
+ {
89
+ status: 401,
90
+ description: 'No valid access token was supplied'
87
91
  }
88
92
  ]
89
93
  },
@@ -99,6 +103,10 @@ export const GENERATED_ROUTES = [
99
103
  {
100
104
  status: 200,
101
105
  description: 'Ok'
106
+ },
107
+ {
108
+ status: 401,
109
+ description: 'The refresh token is missing, invalid or expired, or the client id is unknown'
102
110
  }
103
111
  ]
104
112
  },
@@ -127,6 +135,14 @@ export const GENERATED_ROUTES = [
127
135
  {
128
136
  status: 200,
129
137
  description: 'Ok'
138
+ },
139
+ {
140
+ status: 400,
141
+ description: 'The request body is missing `clientId` or `code`'
142
+ },
143
+ {
144
+ status: 401,
145
+ description: 'The authorization code is invalid, expired, already used, or was issued for another client, or the client id is unknown'
130
146
  }
131
147
  ]
132
148
  },
@@ -155,6 +171,26 @@ export const GENERATED_ROUTES = [
155
171
  {
156
172
  status: 204,
157
173
  description: 'No content'
174
+ },
175
+ {
176
+ status: 400,
177
+ description: 'The request body is missing `currentPassword` or `newPassword`'
178
+ },
179
+ {
180
+ status: 401,
181
+ description: 'No valid access token was supplied'
182
+ },
183
+ {
184
+ status: 403,
185
+ description: 'The current password is incorrect'
186
+ },
187
+ {
188
+ status: 404,
189
+ description: 'The authenticated user no longer exists'
190
+ },
191
+ {
192
+ status: 405,
193
+ description: 'The account authenticates through an external provider, which holds its password'
158
194
  }
159
195
  ]
160
196
  },
@@ -1068,6 +1104,10 @@ export const GENERATED_ROUTES = [
1068
1104
  {
1069
1105
  status: 200,
1070
1106
  description: 'Ok'
1107
+ },
1108
+ {
1109
+ status: 401,
1110
+ description: 'No valid access token or session was supplied'
1071
1111
  }
1072
1112
  ]
1073
1113
  },
@@ -1551,6 +1591,18 @@ export const GENERATED_ROUTES = [
1551
1591
  {
1552
1592
  status: 200,
1553
1593
  description: 'Ok'
1594
+ },
1595
+ {
1596
+ status: 400,
1597
+ description: 'The request body is missing `clientId`, or the CSRF token is missing or invalid'
1598
+ },
1599
+ {
1600
+ status: 401,
1601
+ description: 'No signed-in session'
1602
+ },
1603
+ {
1604
+ status: 403,
1605
+ description: 'The client id is unknown'
1554
1606
  }
1555
1607
  ]
1556
1608
  },
@@ -1579,6 +1631,22 @@ export const GENERATED_ROUTES = [
1579
1631
  {
1580
1632
  status: 200,
1581
1633
  description: 'Ok'
1634
+ },
1635
+ {
1636
+ status: 400,
1637
+ description: 'The request body is missing `username` or `password`'
1638
+ },
1639
+ {
1640
+ status: 401,
1641
+ description: 'The credentials are not valid, or password sign-in is disabled for local accounts'
1642
+ },
1643
+ {
1644
+ status: 429,
1645
+ description: 'Too many failed attempts for this account'
1646
+ },
1647
+ {
1648
+ status: 500,
1649
+ description: 'An unexpected error occurred while signing in'
1582
1650
  }
1583
1651
  ]
1584
1652
  },
@@ -1594,6 +1662,10 @@ export const GENERATED_ROUTES = [
1594
1662
  {
1595
1663
  status: 200,
1596
1664
  description: 'Ok'
1665
+ },
1666
+ {
1667
+ status: 500,
1668
+ description: 'The session store failed to replace the session'
1597
1669
  }
1598
1670
  ]
1599
1671
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/index.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,KAAK,EAAiB,MAAM,aAAa,CAAA;AAyCvD,eAAO,MAAM,MAAM,EAAE,KAAK,EAAgC,CAAA;AAW1D,4EAA4E;AAC5E,eAAO,MAAM,SAAS,GAAI,IAAI,MAAM,KAAG,KAAK,GAAG,SAAyB,CAAA;AAExE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,KAAK,CAAA;IACZ,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B;AAgCD;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,GACpB,QAAQ,MAAM,EACd,MAAM,MAAM,KACX,UAAU,GAAG,SAuBf,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/index.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,KAAK,EAAiB,MAAM,aAAa,CAAA;AAkDvD,eAAO,MAAM,MAAM,EAAE,KAAK,EAAgC,CAAA;AAW1D,4EAA4E;AAC5E,eAAO,MAAM,SAAS,GAAI,IAAI,MAAM,KAAG,KAAK,GAAG,SAAyB,CAAA;AAExE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,KAAK,CAAA;IACZ,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B;AAgCD;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,GACpB,QAAQ,MAAM,EACd,MAAM,MAAM,KACX,UAAU,GAAG,SAuBf,CAAA"}
@@ -33,9 +33,15 @@ const merge = (generated) => {
33
33
  ...(body === undefined ? {} : { body })
34
34
  };
35
35
  });
36
+ // A host-only status has to be one the document states: the annotation marks
37
+ // where a status is answered, it does not add one.
38
+ for (const status of overlay.hostResponses || [])
39
+ if (!documented.has(status))
40
+ throw new Error(`src/routes/overlay.ts marks status ${status} of ${generated.id} as host-only, and the OpenAPI document does not state it. Correct the document in sasjs/server and re-vendor spec/swagger.yaml, or drop the annotation.`);
36
41
  return {
37
42
  ...generated,
38
43
  responses,
44
+ hostResponses: overlay.hostResponses || [],
39
45
  capabilities: overlay.capabilities || TAG_CAPABILITIES[generated.tag] || [],
40
46
  implemented: overlay.implemented === true
41
47
  };
@@ -26,6 +26,15 @@ import type { Capability, HttpMethod } from '../types.js';
26
26
  export interface RouteOverlay {
27
27
  capabilities?: Capability[];
28
28
  implemented?: boolean;
29
+ /**
30
+ * Statuses the document states that this package cannot send because they are
31
+ * the host's to send: an account lockout is the host's login limiter, a
32
+ * provider failure is its identity provider, a session-store failure is its
33
+ * session middleware. They stay in the document - a client still receives
34
+ * them - and are excluded from the corpus parity check, whose other side is
35
+ * what the package answers. The host's own suite pins them.
36
+ */
37
+ hostResponses?: number[];
29
38
  /**
30
39
  * The body the operation sends with a status, where a client keys on it. The
31
40
  * statuses come from the document; this only annotates them.
@@ -1 +1 @@
1
- {"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../../src/routes/overlay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAEzD,MAAM,WAAW,YAAY;IAC3B,YAAY,CAAC,EAAE,UAAU,EAAE,CAAA;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpC;AAED,kFAAkF;AAClF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAczD,CAAA;AAID,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAoDhD,CAAA;AAED,wEAAwE;AACxE,eAAO,MAAM,OAAO,EAAE,UAAU,EAA8C,CAAA"}
1
+ {"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../../src/routes/overlay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAEzD,MAAM,WAAW,YAAY;IAC3B,YAAY,CAAC,EAAE,UAAU,EAAE,CAAA;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpC;AAED,kFAAkF;AAClF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAczD,CAAA;AAYD,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAoFhD,CAAA;AAED,wEAAwE;AACxE,eAAO,MAAM,OAAO,EAAE,UAAU,EAA8C,CAAA"}
@@ -15,6 +15,13 @@ export const TAG_CAPABILITIES = {
15
15
  Web: ['identity']
16
16
  };
17
17
  const success = { status: 'success' };
18
+ const user = {
19
+ uid: '',
20
+ username: '',
21
+ displayName: '',
22
+ isAdmin: false,
23
+ needsToUpdatePassword: false
24
+ };
18
25
  export const OVERLAY = {
19
26
  // the route inventory reports what the CALLER may use, so it needs an identity
20
27
  // even though the rest of the Info tag needs nothing
@@ -66,6 +73,37 @@ export const OVERLAY = {
66
73
  },
67
74
  'POST /SASjsApi/drive/deploy/upload': {
68
75
  implemented: false
76
+ },
77
+ // The lockout and the provider failure are answered before the package is
78
+ // consulted (routes/web/web.ts in sasjs/server).
79
+ 'POST /SASLogon/login': {
80
+ implemented: true,
81
+ hostResponses: [429, 500],
82
+ responses: { 200: { loggedIn: true, user } }
83
+ },
84
+ // The sign-in flow. The statuses are the document's; these entries state the
85
+ // body a client keys on, and that this package answers the operation.
86
+ 'POST /SASjsApi/auth/token': {
87
+ implemented: true,
88
+ responses: { 200: { accessToken: '', refreshToken: '' } }
89
+ },
90
+ 'POST /SASjsApi/auth/refresh': {
91
+ implemented: true,
92
+ responses: { 200: { accessToken: '', refreshToken: '' } }
93
+ },
94
+ 'POST /SASjsApi/auth/logout': { implemented: true },
95
+ 'POST /SASLogon/authorize': {
96
+ implemented: true,
97
+ responses: { 200: { code: '' } }
98
+ },
99
+ 'GET /SASLogon/logout': {
100
+ implemented: true,
101
+ hostResponses: [500],
102
+ responses: { 200: 'OK!' }
103
+ },
104
+ 'GET /SASjsApi/session': {
105
+ implemented: true,
106
+ responses: { 200: user }
69
107
  }
70
108
  };
71
109
  /** Every method the table may state, in the order a diff reads best. */
@@ -67,6 +67,17 @@ export interface GeneratedRoute {
67
67
  }
68
68
  export interface Route extends GeneratedRoute {
69
69
  responses: RouteResponse[];
70
+ /**
71
+ * Statuses the document states that only a HOST can send - a login lockout is
72
+ * the host's limiter, a provider failure is its identity provider. The corpus
73
+ * does not answer them, so the parity check compares the document without
74
+ * them; the host's own suite pins them.
75
+ *
76
+ * Optional, and read as empty when absent: a host that builds a `Route` of its
77
+ * own is describing the document, not the lockout, and requiring the field
78
+ * made every such value a compile error.
79
+ */
80
+ hostResponses?: number[];
70
81
  capabilities: Capability[];
71
82
  /**
72
83
  * Whether this package carries a handler for the operation. A host may still
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;GAIG;AACH,qBAAa,QAAS,SAAQ,KAAK;IAK/B,QAAQ,CAAC,MAAM,EAAE,MAAM;IAJzB,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,QAAO;gBAGb,MAAM,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM;CAKlB;AAED;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,QACH,CAAA;AAElD;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAClB,SAAS,GACT,SAAS,GACT,UAAU,GACV,KAAK,GACL,MAAM,CAAA;AAEV,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAA;AAEpE,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAA;AAE7E,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,aAAa,CAAA;IACjB,QAAQ,EAAE,OAAO,CAAA;IACjB,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,qEAAqE;IACrE,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED,8DAA8D;AAC9D,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,UAAU,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,UAAU,EAAE,CAAA;IACpB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,SAAS,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC1D;AAED,MAAM,WAAW,KAAM,SAAQ,cAAc;IAC3C,SAAS,EAAE,aAAa,EAAE,CAAA;IAC1B,YAAY,EAAE,UAAU,EAAE,CAAA;IAC1B;;;;OAIG;IACH,WAAW,EAAE,OAAO,CAAA;CACrB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,CAAA;IAChD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACtC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACjE,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAA;IACnE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,4DAA4D;IAC5D,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC9C;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,QAAQ,EAAE,CAAA;CACrB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sasjs/api",
3
- "version": "0.2.1",
3
+ "version": "0.3.1",
4
4
  "description": "The SASjs Server API, described once - a generated route table, the services behind it, and the conformance corpus both hosts run",
5
5
  "license": "MIT",
6
6
  "author": "SASjs",