@sasjs/api 0.7.0 → 0.7.2
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/build/browser.js +35 -34
- package/build/cjs/corpus/records.js +3 -3
- package/build/cjs/host/dispatch.js +12 -6
- package/build/cjs/identity/records.js +4 -0
- package/build/cjs/routes/generated.js +6 -6
- package/build/cjs/routes/overlay.js +0 -7
- package/build/esm/corpus/records.js +3 -3
- package/build/esm/host/dispatch.d.ts.map +1 -1
- package/build/esm/host/dispatch.js +12 -6
- package/build/esm/identity/records.d.ts +2 -2
- package/build/esm/identity/records.d.ts.map +1 -1
- package/build/esm/identity/records.js +4 -0
- package/build/esm/routes/generated.js +6 -6
- package/build/esm/routes/overlay.d.ts.map +1 -1
- package/build/esm/routes/overlay.js +0 -7
- package/package.json +3 -2
package/build/browser.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* @sasjs/api 0.7.
|
|
1
|
+
/* @sasjs/api 0.7.2 - the SASjs Server API, for a service worker. https://github.com/sasjs/api */
|
|
2
2
|
"use strict";
|
|
3
3
|
var SASjsApi = (() => {
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1736,8 +1736,8 @@ var SASjsApi = (() => {
|
|
|
1736
1736
|
requestBodies: [],
|
|
1737
1737
|
responses: [
|
|
1738
1738
|
{
|
|
1739
|
-
status:
|
|
1740
|
-
description: "
|
|
1739
|
+
status: 200,
|
|
1740
|
+
description: "Permission Deleted!"
|
|
1741
1741
|
},
|
|
1742
1742
|
{
|
|
1743
1743
|
status: 401,
|
|
@@ -2080,8 +2080,8 @@ var SASjsApi = (() => {
|
|
|
2080
2080
|
requestBodies: ["application/json"],
|
|
2081
2081
|
responses: [
|
|
2082
2082
|
{
|
|
2083
|
-
status:
|
|
2084
|
-
description: "
|
|
2083
|
+
status: 200,
|
|
2084
|
+
description: "Account Deleted!"
|
|
2085
2085
|
},
|
|
2086
2086
|
{
|
|
2087
2087
|
status: 401,
|
|
@@ -2220,8 +2220,8 @@ var SASjsApi = (() => {
|
|
|
2220
2220
|
requestBodies: ["application/json"],
|
|
2221
2221
|
responses: [
|
|
2222
2222
|
{
|
|
2223
|
-
status:
|
|
2224
|
-
description: "
|
|
2223
|
+
status: 200,
|
|
2224
|
+
description: "Account Deleted!"
|
|
2225
2225
|
},
|
|
2226
2226
|
{
|
|
2227
2227
|
status: 401,
|
|
@@ -2626,13 +2626,6 @@ var SASjsApi = (() => {
|
|
|
2626
2626
|
},
|
|
2627
2627
|
"POST /SASjsApi/permission": { implemented: true },
|
|
2628
2628
|
"PATCH /SASjsApi/permission/{uid}": { implemented: true },
|
|
2629
|
-
// The three deletes answer 204 here and 200 on the wire: the server's route
|
|
2630
|
-
// handlers send `res.status(200).send('Account Deleted!')` and
|
|
2631
|
-
// `'Permission Deleted!'`, while tsoa emitted 204 for a void handler, so the
|
|
2632
|
-
// document understates the status. Correcting it is a decorator in
|
|
2633
|
-
// sasjs/server (`@SuccessResponse('200', ...)`), and this package follows the
|
|
2634
|
-
// document until that release lands - a local 200 would fail the schema check
|
|
2635
|
-
// that keeps this table honest.
|
|
2636
2629
|
"DELETE /SASjsApi/permission/{uid}": { implemented: true },
|
|
2637
2630
|
// Session - the caller's own session, then the record behind a triggered one
|
|
2638
2631
|
"GET /SASjsApi/session": {
|
|
@@ -2960,19 +2953,23 @@ var SASjsApi = (() => {
|
|
|
2960
2953
|
)
|
|
2961
2954
|
};
|
|
2962
2955
|
case "DELETE /SASjsApi/user/{uid}":
|
|
2963
|
-
|
|
2964
|
-
|
|
2965
|
-
|
|
2966
|
-
|
|
2967
|
-
|
|
2968
|
-
|
|
2956
|
+
return {
|
|
2957
|
+
status: 200,
|
|
2958
|
+
body: await required().deleteUser(
|
|
2959
|
+
await caller(),
|
|
2960
|
+
{ uid: String(params.uid ?? "") },
|
|
2961
|
+
{ password: body.password }
|
|
2962
|
+
)
|
|
2963
|
+
};
|
|
2969
2964
|
case "DELETE /SASjsApi/user/by/username/{username}":
|
|
2970
|
-
|
|
2971
|
-
|
|
2972
|
-
|
|
2973
|
-
|
|
2974
|
-
|
|
2975
|
-
|
|
2965
|
+
return {
|
|
2966
|
+
status: 200,
|
|
2967
|
+
body: await required().deleteUser(
|
|
2968
|
+
await caller(),
|
|
2969
|
+
{ username: String(params.username ?? "") },
|
|
2970
|
+
{ password: body.password }
|
|
2971
|
+
)
|
|
2972
|
+
};
|
|
2976
2973
|
case "GET /SASjsApi/group":
|
|
2977
2974
|
return { status: 200, body: await required().listGroups(await caller()) };
|
|
2978
2975
|
case "GET /SASjsApi/group/{uid}":
|
|
@@ -3045,11 +3042,13 @@ var SASjsApi = (() => {
|
|
|
3045
3042
|
)
|
|
3046
3043
|
};
|
|
3047
3044
|
case "DELETE /SASjsApi/permission/{uid}":
|
|
3048
|
-
|
|
3049
|
-
|
|
3050
|
-
|
|
3051
|
-
|
|
3052
|
-
|
|
3045
|
+
return {
|
|
3046
|
+
status: 200,
|
|
3047
|
+
body: await required().deletePermission(
|
|
3048
|
+
await caller(),
|
|
3049
|
+
String(params.uid ?? "")
|
|
3050
|
+
)
|
|
3051
|
+
};
|
|
3053
3052
|
case "GET /SASjsApi/client":
|
|
3054
3053
|
return { status: 200, body: await required().listClients(await caller()) };
|
|
3055
3054
|
case "POST /SASjsApi/client":
|
|
@@ -3358,6 +3357,7 @@ var SASjsApi = (() => {
|
|
|
3358
3357
|
throw new ApiError(401, "Invalid password.");
|
|
3359
3358
|
}
|
|
3360
3359
|
await store.deleteUser(current.uid);
|
|
3360
|
+
return "Account Deleted!";
|
|
3361
3361
|
},
|
|
3362
3362
|
async listGroups(caller) {
|
|
3363
3363
|
await requireCaller(store, caller);
|
|
@@ -3505,6 +3505,7 @@ var SASjsApi = (() => {
|
|
|
3505
3505
|
if (!await store.permissionById(uid))
|
|
3506
3506
|
throw new ApiError(404, "Permission not found.");
|
|
3507
3507
|
await store.deletePermission(uid);
|
|
3508
|
+
return "Permission Deleted!";
|
|
3508
3509
|
},
|
|
3509
3510
|
async listClients(caller) {
|
|
3510
3511
|
await requireAdmin(store, caller);
|
|
@@ -5015,7 +5016,7 @@ var SASjsApi = (() => {
|
|
|
5015
5016
|
description: "deletes an account as an administrator, without a password",
|
|
5016
5017
|
identity: ADMIN_SIGNED_IN,
|
|
5017
5018
|
request: { token: ADMIN, params: { uid: RESTRICTED_UID }, body: {} },
|
|
5018
|
-
expect: { status:
|
|
5019
|
+
expect: { status: 200, body: "Account Deleted!" }
|
|
5019
5020
|
},
|
|
5020
5021
|
{
|
|
5021
5022
|
id: "delete-user-not-admin",
|
|
@@ -5043,7 +5044,7 @@ var SASjsApi = (() => {
|
|
|
5043
5044
|
params: { username: "user2" },
|
|
5044
5045
|
body: {}
|
|
5045
5046
|
},
|
|
5046
|
-
expect: { status:
|
|
5047
|
+
expect: { status: 200, body: "Account Deleted!" }
|
|
5047
5048
|
},
|
|
5048
5049
|
{
|
|
5049
5050
|
id: "delete-user-by-username-wrong-password",
|
|
@@ -5687,7 +5688,7 @@ var SASjsApi = (() => {
|
|
|
5687
5688
|
description: "deletes a rule",
|
|
5688
5689
|
identity: ADMIN_SIGNED_IN,
|
|
5689
5690
|
request: { token: ADMIN, params: { uid: "rule-code" } },
|
|
5690
|
-
expect: { status:
|
|
5691
|
+
expect: { status: 200, body: "Permission Deleted!" }
|
|
5691
5692
|
},
|
|
5692
5693
|
{
|
|
5693
5694
|
id: "delete-permission-not-admin",
|
|
@@ -366,7 +366,7 @@ exports.RECORD_CORPUS = [
|
|
|
366
366
|
description: 'deletes an account as an administrator, without a password',
|
|
367
367
|
identity: exports.ADMIN_SIGNED_IN,
|
|
368
368
|
request: { token: ADMIN, params: { uid: RESTRICTED_UID }, body: {} },
|
|
369
|
-
expect: { status:
|
|
369
|
+
expect: { status: 200, body: 'Account Deleted!' }
|
|
370
370
|
},
|
|
371
371
|
{
|
|
372
372
|
id: 'delete-user-not-admin',
|
|
@@ -394,7 +394,7 @@ exports.RECORD_CORPUS = [
|
|
|
394
394
|
params: { username: 'user2' },
|
|
395
395
|
body: {}
|
|
396
396
|
},
|
|
397
|
-
expect: { status:
|
|
397
|
+
expect: { status: 200, body: 'Account Deleted!' }
|
|
398
398
|
},
|
|
399
399
|
{
|
|
400
400
|
id: 'delete-user-by-username-wrong-password',
|
|
@@ -1038,7 +1038,7 @@ exports.RECORD_CORPUS = [
|
|
|
1038
1038
|
description: 'deletes a rule',
|
|
1039
1039
|
identity: exports.ADMIN_SIGNED_IN,
|
|
1040
1040
|
request: { token: ADMIN, params: { uid: 'rule-code' } },
|
|
1041
|
-
expect: { status:
|
|
1041
|
+
expect: { status: 200, body: 'Permission Deleted!' }
|
|
1042
1042
|
},
|
|
1043
1043
|
{
|
|
1044
1044
|
id: 'delete-permission-not-admin',
|
|
@@ -210,11 +210,15 @@ const dispatch = async (services, routeId, request = {}) => {
|
|
|
210
210
|
body: await required().updateUser(await caller(), { username: String(params.username ?? '') }, body)
|
|
211
211
|
};
|
|
212
212
|
case 'DELETE /SASjsApi/user/{uid}':
|
|
213
|
-
|
|
214
|
-
|
|
213
|
+
return {
|
|
214
|
+
status: 200,
|
|
215
|
+
body: await required().deleteUser(await caller(), { uid: String(params.uid ?? '') }, { password: body.password })
|
|
216
|
+
};
|
|
215
217
|
case 'DELETE /SASjsApi/user/by/username/{username}':
|
|
216
|
-
|
|
217
|
-
|
|
218
|
+
return {
|
|
219
|
+
status: 200,
|
|
220
|
+
body: await required().deleteUser(await caller(), { username: String(params.username ?? '') }, { password: body.password })
|
|
221
|
+
};
|
|
218
222
|
case 'GET /SASjsApi/group':
|
|
219
223
|
return { status: 200, body: await required().listGroups(await caller()) };
|
|
220
224
|
case 'GET /SASjsApi/group/{uid}':
|
|
@@ -277,8 +281,10 @@ const dispatch = async (services, routeId, request = {}) => {
|
|
|
277
281
|
body: await required().updatePermission(await caller(), String(params.uid ?? ''), { setting: String(body.setting ?? '') })
|
|
278
282
|
};
|
|
279
283
|
case 'DELETE /SASjsApi/permission/{uid}':
|
|
280
|
-
|
|
281
|
-
|
|
284
|
+
return {
|
|
285
|
+
status: 200,
|
|
286
|
+
body: await required().deletePermission(await caller(), String(params.uid ?? ''))
|
|
287
|
+
};
|
|
282
288
|
case 'GET /SASjsApi/client':
|
|
283
289
|
return { status: 200, body: await required().listClients(await caller()) };
|
|
284
290
|
case 'POST /SASjsApi/client':
|
|
@@ -223,6 +223,9 @@ const createRecordService = (store) => {
|
|
|
223
223
|
throw new types_js_1.ApiError(401, 'Invalid password.');
|
|
224
224
|
}
|
|
225
225
|
await store.deleteUser(current.uid);
|
|
226
|
+
// the server's route sends this string itself; the document carries it as
|
|
227
|
+
// the 200 description, so it is the answer and not an extra
|
|
228
|
+
return 'Account Deleted!';
|
|
226
229
|
},
|
|
227
230
|
async listGroups(caller) {
|
|
228
231
|
await requireCaller(store, caller);
|
|
@@ -360,6 +363,7 @@ const createRecordService = (store) => {
|
|
|
360
363
|
if (!(await store.permissionById(uid)))
|
|
361
364
|
throw new types_js_1.ApiError(404, 'Permission not found.');
|
|
362
365
|
await store.deletePermission(uid);
|
|
366
|
+
return 'Permission Deleted!';
|
|
363
367
|
},
|
|
364
368
|
async listClients(caller) {
|
|
365
369
|
await requireAdmin(store, caller);
|
|
@@ -1198,8 +1198,8 @@ exports.GENERATED_ROUTES = [
|
|
|
1198
1198
|
requestBodies: [],
|
|
1199
1199
|
responses: [
|
|
1200
1200
|
{
|
|
1201
|
-
status:
|
|
1202
|
-
description: '
|
|
1201
|
+
status: 200,
|
|
1202
|
+
description: 'Permission Deleted!'
|
|
1203
1203
|
},
|
|
1204
1204
|
{
|
|
1205
1205
|
status: 401,
|
|
@@ -1542,8 +1542,8 @@ exports.GENERATED_ROUTES = [
|
|
|
1542
1542
|
requestBodies: ['application/json'],
|
|
1543
1543
|
responses: [
|
|
1544
1544
|
{
|
|
1545
|
-
status:
|
|
1546
|
-
description: '
|
|
1545
|
+
status: 200,
|
|
1546
|
+
description: 'Account Deleted!'
|
|
1547
1547
|
},
|
|
1548
1548
|
{
|
|
1549
1549
|
status: 401,
|
|
@@ -1682,8 +1682,8 @@ exports.GENERATED_ROUTES = [
|
|
|
1682
1682
|
requestBodies: ['application/json'],
|
|
1683
1683
|
responses: [
|
|
1684
1684
|
{
|
|
1685
|
-
status:
|
|
1686
|
-
description: '
|
|
1685
|
+
status: 200,
|
|
1686
|
+
description: 'Account Deleted!'
|
|
1687
1687
|
},
|
|
1688
1688
|
{
|
|
1689
1689
|
status: 401,
|
|
@@ -199,13 +199,6 @@ exports.OVERLAY = {
|
|
|
199
199
|
},
|
|
200
200
|
'POST /SASjsApi/permission': { implemented: true },
|
|
201
201
|
'PATCH /SASjsApi/permission/{uid}': { implemented: true },
|
|
202
|
-
// The three deletes answer 204 here and 200 on the wire: the server's route
|
|
203
|
-
// handlers send `res.status(200).send('Account Deleted!')` and
|
|
204
|
-
// `'Permission Deleted!'`, while tsoa emitted 204 for a void handler, so the
|
|
205
|
-
// document understates the status. Correcting it is a decorator in
|
|
206
|
-
// sasjs/server (`@SuccessResponse('200', ...)`), and this package follows the
|
|
207
|
-
// document until that release lands - a local 200 would fail the schema check
|
|
208
|
-
// that keeps this table honest.
|
|
209
202
|
'DELETE /SASjsApi/permission/{uid}': { implemented: true },
|
|
210
203
|
// Session - the caller's own session, then the record behind a triggered one
|
|
211
204
|
'GET /SASjsApi/session': {
|
|
@@ -363,7 +363,7 @@ export const RECORD_CORPUS = [
|
|
|
363
363
|
description: 'deletes an account as an administrator, without a password',
|
|
364
364
|
identity: ADMIN_SIGNED_IN,
|
|
365
365
|
request: { token: ADMIN, params: { uid: RESTRICTED_UID }, body: {} },
|
|
366
|
-
expect: { status:
|
|
366
|
+
expect: { status: 200, body: 'Account Deleted!' }
|
|
367
367
|
},
|
|
368
368
|
{
|
|
369
369
|
id: 'delete-user-not-admin',
|
|
@@ -391,7 +391,7 @@ export const RECORD_CORPUS = [
|
|
|
391
391
|
params: { username: 'user2' },
|
|
392
392
|
body: {}
|
|
393
393
|
},
|
|
394
|
-
expect: { status:
|
|
394
|
+
expect: { status: 200, body: 'Account Deleted!' }
|
|
395
395
|
},
|
|
396
396
|
{
|
|
397
397
|
id: 'delete-user-by-username-wrong-password',
|
|
@@ -1035,7 +1035,7 @@ export const RECORD_CORPUS = [
|
|
|
1035
1035
|
description: 'deletes a rule',
|
|
1036
1036
|
identity: ADMIN_SIGNED_IN,
|
|
1037
1037
|
request: { token: ADMIN, params: { uid: 'rule-code' } },
|
|
1038
|
-
expect: { status:
|
|
1038
|
+
expect: { status: 200, body: 'Permission Deleted!' }
|
|
1039
1039
|
},
|
|
1040
1040
|
{
|
|
1041
1041
|
id: 'delete-permission-not-admin',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../../src/host/dispatch.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAOnD,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,oFAAoF;IACpF,IAAI,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAA;KAAE,CAAA;IACtD;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iEAAiE;IACjE,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,mBAAmB;IACnB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,CAAA;CAC/B;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,YAAY,CAAA;IACnB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAA;IAC1B,yFAAyF;IACzF,OAAO,CAAC,EAAE,aAAa,CAAA;CACxB;AAsCD,eAAO,MAAM,QAAQ,GACnB,UAAU,QAAQ,EAClB,SAAS,MAAM,EACf,UAAS,UAAe,KACvB,OAAO,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../../src/host/dispatch.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAOnD,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,oFAAoF;IACpF,IAAI,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAA;KAAE,CAAA;IACtD;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iEAAiE;IACjE,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,mBAAmB;IACnB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,CAAA;CAC/B;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,YAAY,CAAA;IACnB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAA;IAC1B,yFAAyF;IACzF,OAAO,CAAC,EAAE,aAAa,CAAA;CACxB;AAsCD,eAAO,MAAM,QAAQ,GACnB,UAAU,QAAQ,EAClB,SAAS,MAAM,EACf,UAAS,UAAe,KACvB,OAAO,CAAC,WAAW,CAqWrB,CAAA;AAED,0DAA0D;AAC1D,eAAO,MAAM,cAAc,EAAE,MAAM,EAwClC,CAAA"}
|
|
@@ -207,11 +207,15 @@ export const dispatch = async (services, routeId, request = {}) => {
|
|
|
207
207
|
body: await required().updateUser(await caller(), { username: String(params.username ?? '') }, body)
|
|
208
208
|
};
|
|
209
209
|
case 'DELETE /SASjsApi/user/{uid}':
|
|
210
|
-
|
|
211
|
-
|
|
210
|
+
return {
|
|
211
|
+
status: 200,
|
|
212
|
+
body: await required().deleteUser(await caller(), { uid: String(params.uid ?? '') }, { password: body.password })
|
|
213
|
+
};
|
|
212
214
|
case 'DELETE /SASjsApi/user/by/username/{username}':
|
|
213
|
-
|
|
214
|
-
|
|
215
|
+
return {
|
|
216
|
+
status: 200,
|
|
217
|
+
body: await required().deleteUser(await caller(), { username: String(params.username ?? '') }, { password: body.password })
|
|
218
|
+
};
|
|
215
219
|
case 'GET /SASjsApi/group':
|
|
216
220
|
return { status: 200, body: await required().listGroups(await caller()) };
|
|
217
221
|
case 'GET /SASjsApi/group/{uid}':
|
|
@@ -274,8 +278,10 @@ export const dispatch = async (services, routeId, request = {}) => {
|
|
|
274
278
|
body: await required().updatePermission(await caller(), String(params.uid ?? ''), { setting: String(body.setting ?? '') })
|
|
275
279
|
};
|
|
276
280
|
case 'DELETE /SASjsApi/permission/{uid}':
|
|
277
|
-
|
|
278
|
-
|
|
281
|
+
return {
|
|
282
|
+
status: 200,
|
|
283
|
+
body: await required().deletePermission(await caller(), String(params.uid ?? ''))
|
|
284
|
+
};
|
|
279
285
|
case 'GET /SASjsApi/client':
|
|
280
286
|
return { status: 200, body: await required().listClients(await caller()) };
|
|
281
287
|
case 'POST /SASjsApi/client':
|
|
@@ -63,7 +63,7 @@ export interface RecordService {
|
|
|
63
63
|
username?: string;
|
|
64
64
|
}, body: {
|
|
65
65
|
password?: string;
|
|
66
|
-
}): Promise<
|
|
66
|
+
}): Promise<string>;
|
|
67
67
|
listGroups(caller: Subject | undefined): Promise<GroupResponse[]>;
|
|
68
68
|
getGroup(caller: Subject | undefined, by: {
|
|
69
69
|
uid?: string;
|
|
@@ -88,7 +88,7 @@ export interface RecordService {
|
|
|
88
88
|
updatePermission(caller: Subject | undefined, uid: string, body: {
|
|
89
89
|
setting: string;
|
|
90
90
|
}): Promise<PermissionResponse>;
|
|
91
|
-
deletePermission(caller: Subject | undefined, uid: string): Promise<
|
|
91
|
+
deletePermission(caller: Subject | undefined, uid: string): Promise<string>;
|
|
92
92
|
listClients(caller: Subject | undefined): Promise<IdentityClientRecord[]>;
|
|
93
93
|
createClient(caller: Subject | undefined, body: IdentityClientRecord): Promise<IdentityClientRecord>;
|
|
94
94
|
/** `PATCH /SASjsApi/auth/updatePassword`, the caller's own password. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"records.d.ts","sourceRoot":"","sources":["../../../src/identity/records.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EACV,oBAAoB,EAGpB,aAAa,EAEb,OAAO,EACR,MAAM,YAAY,CAAA;AAEnB,iFAAiF;AACjF,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,mBAAoB,SAAQ,YAAY;IACvD,QAAQ,EAAE,OAAO,CAAA;IACjB,qBAAqB,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAC9D;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,oBAAqB,SAAQ,aAAa;IACzD,QAAQ,EAAE,OAAO,CAAA;IACjB,KAAK,EAAE,YAAY,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB,KAAK,CAAC,EAAE,oBAAoB,CAAA;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IAC/D,OAAO,CACL,MAAM,EAAE,OAAO,GAAG,SAAS,EAC3B,EAAE,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GACtC,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAC/B,UAAU,CACR,MAAM,EAAE,OAAO,GAAG,SAAS,EAC3B,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAA;QAChB,WAAW,EAAE,MAAM,CAAA;QACnB,QAAQ,EAAE,MAAM,CAAA;QAChB,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,GACA,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAC/B,UAAU,CACR,MAAM,EAAE,OAAO,GAAG,SAAS,EAC3B,EAAE,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,EACvC,IAAI,EAAE;QACJ,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,GACA,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAC/B,UAAU,CACR,MAAM,EAAE,OAAO,GAAG,SAAS,EAC3B,EAAE,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,EACvC,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAC1B,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"records.d.ts","sourceRoot":"","sources":["../../../src/identity/records.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EACV,oBAAoB,EAGpB,aAAa,EAEb,OAAO,EACR,MAAM,YAAY,CAAA;AAEnB,iFAAiF;AACjF,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,mBAAoB,SAAQ,YAAY;IACvD,QAAQ,EAAE,OAAO,CAAA;IACjB,qBAAqB,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAC9D;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,oBAAqB,SAAQ,aAAa;IACzD,QAAQ,EAAE,OAAO,CAAA;IACjB,KAAK,EAAE,YAAY,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB,KAAK,CAAC,EAAE,oBAAoB,CAAA;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IAC/D,OAAO,CACL,MAAM,EAAE,OAAO,GAAG,SAAS,EAC3B,EAAE,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GACtC,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAC/B,UAAU,CACR,MAAM,EAAE,OAAO,GAAG,SAAS,EAC3B,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAA;QAChB,WAAW,EAAE,MAAM,CAAA;QACnB,QAAQ,EAAE,MAAM,CAAA;QAChB,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,GACA,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAC/B,UAAU,CACR,MAAM,EAAE,OAAO,GAAG,SAAS,EAC3B,EAAE,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,EACvC,IAAI,EAAE;QACJ,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,GACA,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAC/B,UAAU,CACR,MAAM,EAAE,OAAO,GAAG,SAAS,EAC3B,EAAE,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,EACvC,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAC1B,OAAO,CAAC,MAAM,CAAC,CAAA;IAElB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;IACjE,QAAQ,CACN,MAAM,EAAE,OAAO,GAAG,SAAS,EAC3B,EAAE,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAClC,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAChC,WAAW,CACT,MAAM,EAAE,OAAO,GAAG,SAAS,EAC3B,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAC9D,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAChC,WAAW,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpE,cAAc,CACZ,MAAM,EAAE,OAAO,GAAG,SAAS,EAC3B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAChC,mBAAmB,CACjB,MAAM,EAAE,OAAO,GAAG,SAAS,EAC3B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAEhC,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAA;IAC3E,gBAAgB,CACd,MAAM,EAAE,OAAO,GAAG,SAAS,EAC3B,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,aAAa,EAAE,MAAM,CAAA;QACrB,WAAW,EAAE,MAAM,CAAA;KACpB,GACA,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAC9B,gBAAgB,CACd,MAAM,EAAE,OAAO,GAAG,SAAS,EAC3B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GACxB,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAC9B,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAE3E,WAAW,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAA;IACzE,YAAY,CACV,MAAM,EAAE,OAAO,GAAG,SAAS,EAC3B,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAEhC,wEAAwE;IACxE,cAAc,CACZ,MAAM,EAAE,OAAO,GAAG,SAAS,EAC3B,IAAI,EAAE;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GACrD,OAAO,CAAC,IAAI,CAAC,CAAA;CACjB;AAiED,eAAO,MAAM,mBAAmB,GAAI,OAAO,OAAO,KAAG,MAKf,CAAA;AAetC,eAAO,MAAM,mBAAmB,GAAI,OAAO,aAAa,KAAG,aAia1D,CAAA"}
|
|
@@ -219,6 +219,9 @@ export const createRecordService = (store) => {
|
|
|
219
219
|
throw new ApiError(401, 'Invalid password.');
|
|
220
220
|
}
|
|
221
221
|
await store.deleteUser(current.uid);
|
|
222
|
+
// the server's route sends this string itself; the document carries it as
|
|
223
|
+
// the 200 description, so it is the answer and not an extra
|
|
224
|
+
return 'Account Deleted!';
|
|
222
225
|
},
|
|
223
226
|
async listGroups(caller) {
|
|
224
227
|
await requireCaller(store, caller);
|
|
@@ -356,6 +359,7 @@ export const createRecordService = (store) => {
|
|
|
356
359
|
if (!(await store.permissionById(uid)))
|
|
357
360
|
throw new ApiError(404, 'Permission not found.');
|
|
358
361
|
await store.deletePermission(uid);
|
|
362
|
+
return 'Permission Deleted!';
|
|
359
363
|
},
|
|
360
364
|
async listClients(caller) {
|
|
361
365
|
await requireAdmin(store, caller);
|
|
@@ -1195,8 +1195,8 @@ export const GENERATED_ROUTES = [
|
|
|
1195
1195
|
requestBodies: [],
|
|
1196
1196
|
responses: [
|
|
1197
1197
|
{
|
|
1198
|
-
status:
|
|
1199
|
-
description: '
|
|
1198
|
+
status: 200,
|
|
1199
|
+
description: 'Permission Deleted!'
|
|
1200
1200
|
},
|
|
1201
1201
|
{
|
|
1202
1202
|
status: 401,
|
|
@@ -1539,8 +1539,8 @@ export const GENERATED_ROUTES = [
|
|
|
1539
1539
|
requestBodies: ['application/json'],
|
|
1540
1540
|
responses: [
|
|
1541
1541
|
{
|
|
1542
|
-
status:
|
|
1543
|
-
description: '
|
|
1542
|
+
status: 200,
|
|
1543
|
+
description: 'Account Deleted!'
|
|
1544
1544
|
},
|
|
1545
1545
|
{
|
|
1546
1546
|
status: 401,
|
|
@@ -1679,8 +1679,8 @@ export const GENERATED_ROUTES = [
|
|
|
1679
1679
|
requestBodies: ['application/json'],
|
|
1680
1680
|
responses: [
|
|
1681
1681
|
{
|
|
1682
|
-
status:
|
|
1683
|
-
description: '
|
|
1682
|
+
status: 200,
|
|
1683
|
+
description: 'Account Deleted!'
|
|
1684
1684
|
},
|
|
1685
1685
|
{
|
|
1686
1686
|
status: 401,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../../src/routes/overlay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAGzD,yDAAyD;AACzD,UAAU,aAAa;IACrB,YAAY,CAAC,EAAE,UAAU,EAAE,CAAA;IAC3B;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpC;AAED;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG,aAAa,GACtC,CAAC;IAAE,WAAW,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,WAAW,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAElE,kFAAkF;AAClF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAczD,CAAA;AAiDD,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../../src/routes/overlay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAGzD,yDAAyD;AACzD,UAAU,aAAa;IACrB,YAAY,CAAC,EAAE,UAAU,EAAE,CAAA;IAC3B;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpC;AAED;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG,aAAa,GACtC,CAAC;IAAE,WAAW,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,WAAW,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAElE,kFAAkF;AAClF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAczD,CAAA;AAiDD,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAuNhD,CAAA;AAED,wEAAwE;AACxE,eAAO,MAAM,OAAO,EAAE,UAAU,EAA8C,CAAA"}
|
|
@@ -196,13 +196,6 @@ export const OVERLAY = {
|
|
|
196
196
|
},
|
|
197
197
|
'POST /SASjsApi/permission': { implemented: true },
|
|
198
198
|
'PATCH /SASjsApi/permission/{uid}': { implemented: true },
|
|
199
|
-
// The three deletes answer 204 here and 200 on the wire: the server's route
|
|
200
|
-
// handlers send `res.status(200).send('Account Deleted!')` and
|
|
201
|
-
// `'Permission Deleted!'`, while tsoa emitted 204 for a void handler, so the
|
|
202
|
-
// document understates the status. Correcting it is a decorator in
|
|
203
|
-
// sasjs/server (`@SuccessResponse('200', ...)`), and this package follows the
|
|
204
|
-
// document until that release lands - a local 200 would fail the schema check
|
|
205
|
-
// that keeps this table honest.
|
|
206
199
|
'DELETE /SASjsApi/permission/{uid}': { implemented: true },
|
|
207
200
|
// Session - the caller's own session, then the record behind a triggered one
|
|
208
201
|
'GET /SASjsApi/session': {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sasjs/api",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.2",
|
|
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",
|
|
@@ -35,7 +35,8 @@
|
|
|
35
35
|
"lint": "prettier --check \"{src,spec,scripts}/**/*.{ts,mjs,md}\" \"*.{json,md}\"",
|
|
36
36
|
"lint:fix": "prettier --write \"{src,spec,scripts}/**/*.{ts,mjs,md}\" \"*.{json,md}\"",
|
|
37
37
|
"sync:routes": "node scripts/sync-routes.mjs",
|
|
38
|
-
"check:routes": "node scripts/sync-routes.mjs --check"
|
|
38
|
+
"check:routes": "node scripts/sync-routes.mjs --check",
|
|
39
|
+
"audit:gate": "node scripts/audit.mjs"
|
|
39
40
|
},
|
|
40
41
|
"devDependencies": {
|
|
41
42
|
"@semantic-release/commit-analyzer": "13.0.1",
|