jxp 2.16.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.sample +31 -6
- package/README.md +27 -13
- package/dist/bin/init_db.d.ts +3 -0
- package/dist/bin/init_db.d.ts.map +1 -0
- package/dist/bin/init_db.js +48 -0
- package/dist/bin/init_db.js.map +1 -0
- package/dist/bin/server.d.ts +4 -0
- package/dist/bin/server.d.ts.map +1 -0
- package/dist/bin/server.js +132 -0
- package/dist/bin/server.js.map +1 -0
- package/dist/bin/setup.d.ts +3 -0
- package/dist/bin/setup.d.ts.map +1 -0
- package/dist/bin/setup.js +185 -0
- package/dist/bin/setup.js.map +1 -0
- package/dist/globals.d.ts +14 -0
- package/dist/globals.d.ts.map +1 -0
- package/dist/globals.js +3 -0
- package/dist/globals.js.map +1 -0
- package/dist/libs/aggregate_guard.d.ts +5 -0
- package/dist/libs/aggregate_guard.d.ts.map +1 -0
- package/dist/libs/aggregate_guard.js +58 -0
- package/dist/libs/aggregate_guard.js.map +1 -0
- package/dist/libs/bulkwrite_guard.d.ts +5 -0
- package/dist/libs/bulkwrite_guard.d.ts.map +1 -0
- package/dist/libs/bulkwrite_guard.js +44 -0
- package/dist/libs/bulkwrite_guard.js.map +1 -0
- package/dist/libs/cache.d.ts +2 -0
- package/dist/libs/cache.d.ts.map +1 -0
- package/dist/libs/cache.js +94 -0
- package/dist/libs/cache.js.map +1 -0
- package/dist/libs/call_guard.d.ts +3 -0
- package/dist/libs/call_guard.d.ts.map +1 -0
- package/dist/libs/call_guard.js +17 -0
- package/dist/libs/call_guard.js.map +1 -0
- package/dist/libs/connection_string.d.ts +3 -0
- package/dist/libs/connection_string.d.ts.map +1 -0
- package/dist/libs/connection_string.js +4 -0
- package/dist/libs/connection_string.js.map +1 -0
- package/dist/libs/datamunging.d.ts +2 -0
- package/dist/libs/datamunging.d.ts.map +1 -0
- package/dist/libs/datamunging.js +320 -0
- package/dist/libs/datamunging.js.map +1 -0
- package/dist/libs/docs.d.ts +2 -0
- package/dist/libs/docs.d.ts.map +1 -0
- package/dist/libs/docs.js +307 -0
- package/dist/libs/docs.js.map +1 -0
- package/dist/libs/groups.d.ts +2 -0
- package/dist/libs/groups.d.ts.map +1 -0
- package/dist/libs/groups.js +136 -0
- package/dist/libs/groups.js.map +1 -0
- package/dist/libs/jxp.d.ts +4 -0
- package/dist/libs/jxp.d.ts.map +1 -0
- package/dist/libs/jxp.js +1157 -0
- package/dist/libs/jxp.js.map +1 -0
- package/dist/libs/link_index.d.ts +14 -0
- package/dist/libs/link_index.d.ts.map +1 -0
- package/dist/libs/link_index.js +37 -0
- package/dist/libs/link_index.js.map +1 -0
- package/dist/libs/load-config.d.ts +16 -0
- package/dist/libs/load-config.d.ts.map +1 -0
- package/dist/libs/load-config.js +155 -0
- package/dist/libs/load-config.js.map +1 -0
- package/dist/libs/login.d.ts +2 -0
- package/dist/libs/login.d.ts.map +1 -0
- package/dist/libs/login.js +244 -0
- package/dist/libs/login.js.map +1 -0
- package/dist/libs/modeldir.d.ts +5 -0
- package/dist/libs/modeldir.d.ts.map +1 -0
- package/dist/libs/modeldir.js +15 -0
- package/dist/libs/modeldir.js.map +1 -0
- package/dist/libs/query_limits.d.ts +2 -0
- package/dist/libs/query_limits.d.ts.map +1 -0
- package/dist/libs/query_limits.js +84 -0
- package/dist/libs/query_limits.js.map +1 -0
- package/dist/libs/query_manipulation.d.ts +3 -0
- package/dist/libs/query_manipulation.d.ts.map +1 -0
- package/{libs → dist/libs}/query_manipulation.js +22 -21
- package/dist/libs/query_manipulation.js.map +1 -0
- package/dist/libs/query_sanitize.d.ts +5 -0
- package/dist/libs/query_sanitize.d.ts.map +1 -0
- package/dist/libs/query_sanitize.js +109 -0
- package/dist/libs/query_sanitize.js.map +1 -0
- package/dist/libs/response_sanitize.d.ts +7 -0
- package/dist/libs/response_sanitize.d.ts.map +1 -0
- package/dist/libs/response_sanitize.js +57 -0
- package/dist/libs/response_sanitize.js.map +1 -0
- package/dist/libs/safe_error.d.ts +3 -0
- package/dist/libs/safe_error.d.ts.map +1 -0
- package/dist/libs/safe_error.js +14 -0
- package/dist/libs/safe_error.js.map +1 -0
- package/dist/libs/schema.d.ts +14 -0
- package/dist/libs/schema.d.ts.map +1 -0
- package/dist/libs/schema.js +98 -0
- package/dist/libs/schema.js.map +1 -0
- package/dist/libs/schema_description.d.ts +3 -0
- package/dist/libs/schema_description.d.ts.map +1 -0
- package/{libs → dist/libs}/schema_description.js +12 -21
- package/dist/libs/schema_description.js.map +1 -0
- package/dist/libs/security.d.ts +2 -0
- package/dist/libs/security.d.ts.map +1 -0
- package/dist/libs/security.js +428 -0
- package/dist/libs/security.js.map +1 -0
- package/dist/libs/setup.d.ts +2 -0
- package/dist/libs/setup.d.ts.map +1 -0
- package/dist/libs/setup.js +87 -0
- package/dist/libs/setup.js.map +1 -0
- package/dist/libs/startup-deprecations.d.ts +2 -0
- package/dist/libs/startup-deprecations.d.ts.map +1 -0
- package/dist/libs/startup-deprecations.js +21 -0
- package/dist/libs/startup-deprecations.js.map +1 -0
- package/dist/libs/startup.d.ts +16 -0
- package/dist/libs/startup.d.ts.map +1 -0
- package/dist/libs/startup.js +63 -0
- package/dist/libs/startup.js.map +1 -0
- package/dist/libs/ws.d.ts +2 -0
- package/dist/libs/ws.d.ts.map +1 -0
- package/{libs → dist/libs}/ws.js +114 -73
- package/dist/libs/ws.js.map +1 -0
- package/dist/models/apikey_model.d.ts +10 -0
- package/dist/models/apikey_model.d.ts.map +1 -0
- package/dist/models/apikey_model.js +14 -0
- package/dist/models/apikey_model.js.map +1 -0
- package/dist/models/link_model.d.ts +9 -0
- package/dist/models/link_model.d.ts.map +1 -0
- package/dist/models/link_model.js +20 -0
- package/dist/models/link_model.js.map +1 -0
- package/dist/models/refreshtoken_model.d.ts +11 -0
- package/dist/models/refreshtoken_model.d.ts.map +1 -0
- package/dist/models/refreshtoken_model.js +22 -0
- package/dist/models/refreshtoken_model.js.map +1 -0
- package/dist/models/test_model.d.ts +24 -0
- package/dist/models/test_model.d.ts.map +1 -0
- package/dist/models/test_model.js +44 -0
- package/dist/models/test_model.js.map +1 -0
- package/dist/models/token_model.d.ts +14 -0
- package/dist/models/token_model.d.ts.map +1 -0
- package/dist/models/token_model.js +25 -0
- package/dist/models/token_model.js.map +1 -0
- package/dist/models/user_model.d.ts +15 -0
- package/dist/models/user_model.d.ts.map +1 -0
- package/dist/models/user_model.js +38 -0
- package/dist/models/user_model.js.map +1 -0
- package/dist/models/usergroups_model.d.ts +9 -0
- package/dist/models/usergroups_model.d.ts.map +1 -0
- package/dist/models/usergroups_model.js +18 -0
- package/dist/models/usergroups_model.js.map +1 -0
- package/dist/types/jxp-config.d.ts +134 -0
- package/dist/types/jxp-config.d.ts.map +1 -0
- package/dist/types/jxp-config.js +3 -0
- package/dist/types/jxp-config.js.map +1 -0
- package/dist/types/schema-fields.d.ts +43 -0
- package/dist/types/schema-fields.d.ts.map +1 -0
- package/dist/types/schema-fields.js +3 -0
- package/dist/types/schema-fields.js.map +1 -0
- package/docs/aggregations.md +40 -21
- package/docs/api.md +55 -15
- package/docs/authentication.md +60 -37
- package/docs/bulk_writes.md +11 -8
- package/docs/caching.md +28 -11
- package/docs/changelog.md +237 -31
- package/docs/configuration.md +99 -118
- package/docs/hooks.md +12 -8
- package/docs/index.md +17 -17
- package/docs/installation.md +23 -18
- package/docs/permissions.md +33 -19
- package/docs/queries.md +9 -5
- package/docs/schemas.md +21 -10
- package/docs/special.md +4 -4
- package/docs/typescript.md +86 -0
- package/docs/websocket.md +99 -1
- package/mkdocs.yml +1 -0
- package/package.json +121 -69
- package/templates/api.pug +32 -0
- package/templates/app-server.js +43 -0
- package/templates/app.env.sample +8 -0
- package/templates/assets/api-console.js +133 -0
- package/templates/assets/docs.css +227 -0
- package/templates/index.pug +62 -2
- package/templates/layout.pug +17 -11
- package/templates/md.pug +1 -1
- package/templates/model.pug +117 -68
- package/templates/navbar.pug +14 -21
- package/templates/sidebar.pug +30 -0
- package/.env +0 -9
- package/.eslintrc.json +0 -20
- package/.jshintrc +0 -4
- package/.vscode/launch.json +0 -29
- package/.vscode/settings.json +0 -3
- package/Dockerfile +0 -7
- package/bin/init_db.js +0 -54
- package/bin/server.js +0 -84
- package/bin/setup.js +0 -190
- package/config_sample.json +0 -10
- package/docker-compose.yml +0 -32
- package/libs/cache.js +0 -92
- package/libs/connection_string.js +0 -24
- package/libs/datamunging.js +0 -335
- package/libs/docs.js +0 -162
- package/libs/groups.js +0 -133
- package/libs/jxp.js +0 -1208
- package/libs/login.js +0 -218
- package/libs/modeldir.js +0 -14
- package/libs/schema.js +0 -99
- package/libs/security.js +0 -410
- package/libs/setup.js +0 -90
- package/models/apikey_model.js +0 -10
- package/models/link_model.js +0 -17
- package/models/refreshtoken_model.js +0 -20
- package/models/test_model.js +0 -50
- package/models/token_model.js +0 -23
- package/models/user_model.js +0 -38
- package/models/usergroups_model.js +0 -15
- package/setup.sh +0 -3
- package/test/.eslintrc.json +0 -13
- package/test/init.js +0 -92
- package/test/setup.test.js +0 -62
- package/test/test.js +0 -1527
- package/test/wstest.js.old +0 -124
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const schema_1 = __importDefault(require("../libs/schema"));
|
|
7
|
+
const load_config_1 = require("../libs/load-config");
|
|
8
|
+
const RefreshTokenSchema = new schema_1.default({
|
|
9
|
+
user_id: { type: global.ObjectId, index: true },
|
|
10
|
+
refresh_token: { type: String, index: true },
|
|
11
|
+
expires_in: { type: Number, default: (0, load_config_1.getRefreshTokenExpiry)() },
|
|
12
|
+
}, {
|
|
13
|
+
perms: {
|
|
14
|
+
admin: "crud",
|
|
15
|
+
owner: "crud",
|
|
16
|
+
user: "",
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
RefreshTokenSchema.index({ expire_at: 1 }, { expireAfterSeconds: (0, load_config_1.getRefreshTokenExpiry)() });
|
|
20
|
+
const RefreshToken = schema_1.default.model("RefreshToken", RefreshTokenSchema);
|
|
21
|
+
exports.default = RefreshToken;
|
|
22
|
+
//# sourceMappingURL=refreshtoken_model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refreshtoken_model.js","sourceRoot":"","sources":["../../src/models/refreshtoken_model.ts"],"names":[],"mappings":";;;;;AAAA,4DAAuC;AACvC,qDAA4D;AAW5D,MAAM,kBAAkB,GAAG,IAAI,gBAAS,CACvC;IACC,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE;IAC/C,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;IAC5C,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAA,mCAAqB,GAAE,EAAE;CAC9D,EACD;IACC,KAAK,EAAE;QACN,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,EAAE;KACR;CACD,CACD,CAAC;AAEF,kBAAkB,CAAC,KAAK,CACvB,EAAE,SAAS,EAAE,CAAC,EAAE,EAChB,EAAE,kBAAkB,EAAE,IAAA,mCAAqB,GAAE,EAAE,CAC/C,CAAC;AAEF,MAAM,YAAY,GAAG,gBAAS,CAAC,KAAK,CAAgB,cAAc,EAAE,kBAAkB,CAAC,CAAC;AACxF,kBAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Types } from "mongoose";
|
|
2
|
+
export interface ITest {
|
|
3
|
+
_id?: Types.ObjectId;
|
|
4
|
+
foo?: string;
|
|
5
|
+
bar?: string;
|
|
6
|
+
user_id?: Types.ObjectId;
|
|
7
|
+
yack?: unknown;
|
|
8
|
+
shmack?: string[];
|
|
9
|
+
password?: string;
|
|
10
|
+
fulltext?: string;
|
|
11
|
+
link_id?: Types.ObjectId;
|
|
12
|
+
other_link_id?: Types.ObjectId;
|
|
13
|
+
string_array?: string[];
|
|
14
|
+
array_link_id?: Types.ObjectId[];
|
|
15
|
+
composite_array?: {
|
|
16
|
+
afoo?: string;
|
|
17
|
+
abar?: number;
|
|
18
|
+
}[];
|
|
19
|
+
mixed_array?: unknown[];
|
|
20
|
+
date_field?: Date;
|
|
21
|
+
}
|
|
22
|
+
declare const Test: import("mongoose").Model<ITest, {}, {}, {}, any>;
|
|
23
|
+
export default Test;
|
|
24
|
+
//# sourceMappingURL=test_model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test_model.d.ts","sourceRoot":"","sources":["../../src/models/test_model.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,WAAW,KAAK;IACrB,GAAG,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC;IACzB,aAAa,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;IACjC,eAAe,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrD,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,IAAI,CAAC;CAClB;AA0CD,QAAA,MAAM,IAAI,kDAA6C,CAAC;AACxD,eAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const restify_errors_1 = __importDefault(require("restify-errors"));
|
|
7
|
+
const schema_1 = __importDefault(require("../libs/schema"));
|
|
8
|
+
const TestSchema = new schema_1.default({
|
|
9
|
+
foo: String,
|
|
10
|
+
bar: { type: String, unique: true, index: true, default: "Some Default" },
|
|
11
|
+
user_id: { type: global.ObjectId, link: "User" },
|
|
12
|
+
yack: global.Mixed,
|
|
13
|
+
shmack: [String],
|
|
14
|
+
password: String,
|
|
15
|
+
fulltext: { type: String, index: { text: true } },
|
|
16
|
+
link_id: { type: global.ObjectId, link: "Link" },
|
|
17
|
+
other_link_id: { type: global.ObjectId, link: "Link", map_to: "other_link" },
|
|
18
|
+
string_array: [String],
|
|
19
|
+
array_link_id: [{ type: global.ObjectId, link: "Link", map_to: "array_link", justOne: false }],
|
|
20
|
+
composite_array: [{ afoo: String, abar: Number }],
|
|
21
|
+
mixed_array: [global.Mixed],
|
|
22
|
+
date_field: { type: Date, index: true },
|
|
23
|
+
}, {
|
|
24
|
+
perms: {
|
|
25
|
+
admin: "crud",
|
|
26
|
+
owner: "crud",
|
|
27
|
+
user: "cr",
|
|
28
|
+
all: "r",
|
|
29
|
+
},
|
|
30
|
+
callable_statics: ["test"],
|
|
31
|
+
advanced_queries: { query: true, aggregate: true, bulkwrite: true },
|
|
32
|
+
});
|
|
33
|
+
TestSchema.statics.test = function () {
|
|
34
|
+
return "Testing OKAY!";
|
|
35
|
+
};
|
|
36
|
+
TestSchema.pre("save", function (next) {
|
|
37
|
+
if (this.bar == "Throw an error") {
|
|
38
|
+
throw new restify_errors_1.default.ImATeapotError("I'm a teapot");
|
|
39
|
+
}
|
|
40
|
+
next();
|
|
41
|
+
});
|
|
42
|
+
const Test = schema_1.default.model("Test", TestSchema);
|
|
43
|
+
exports.default = Test;
|
|
44
|
+
//# sourceMappingURL=test_model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test_model.js","sourceRoot":"","sources":["../../src/models/test_model.ts"],"names":[],"mappings":";;;;;AAAA,oEAAoC;AACpC,4DAAuC;AAqBvC,MAAM,UAAU,GAAG,IAAI,gBAAS,CAC/B;IACC,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE;IACzE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;IAChD,IAAI,EAAE,MAAM,CAAC,KAAK;IAClB,MAAM,EAAE,CAAC,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IACjD,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;IAChD,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE;IAC5E,YAAY,EAAE,CAAC,MAAM,CAAC;IACtB,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC9F,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACjD,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;IAC3B,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;CACvC,EACD;IACC,KAAK,EAAE;QACN,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,GAAG;KACR;IACD,gBAAgB,EAAE,CAAC,MAAM,CAAC;IAC1B,gBAAgB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;CACnE,CACD,CAAC;AAEF,UAAU,CAAC,OAAO,CAAC,IAAI,GAAG;IACzB,OAAO,eAAe,CAAC;AACxB,CAAC,CAAC;AAEF,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,IAAI;IACpC,IAAI,IAAI,CAAC,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAClC,MAAM,IAAI,wBAAM,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,EAAE,CAAC;AACR,CAAC,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG,gBAAS,CAAC,KAAK,CAAQ,MAAM,EAAE,UAAU,CAAC,CAAC;AACxD,kBAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Types } from "mongoose";
|
|
2
|
+
export interface IToken {
|
|
3
|
+
_id?: Types.ObjectId;
|
|
4
|
+
user_id?: Types.ObjectId;
|
|
5
|
+
provider?: string;
|
|
6
|
+
access_token?: string;
|
|
7
|
+
token_type?: string;
|
|
8
|
+
expires_in?: number;
|
|
9
|
+
last_accessed?: Date;
|
|
10
|
+
createdAt?: Date;
|
|
11
|
+
}
|
|
12
|
+
declare const Token: import("mongoose").Model<IToken, {}, {}, {}, any>;
|
|
13
|
+
export default Token;
|
|
14
|
+
//# sourceMappingURL=token_model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token_model.d.ts","sourceRoot":"","sources":["../../src/models/token_model.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,WAAW,MAAM;IACtB,GAAG,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC;IACrB,OAAO,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,IAAI,CAAC;CACjB;AAsBD,QAAA,MAAM,KAAK,mDAAgD,CAAC;AAC5D,eAAe,KAAK,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const schema_1 = __importDefault(require("../libs/schema"));
|
|
7
|
+
const load_config_1 = require("../libs/load-config");
|
|
8
|
+
const TokenSchema = new schema_1.default({
|
|
9
|
+
user_id: { type: global.ObjectId, index: true },
|
|
10
|
+
provider: String,
|
|
11
|
+
access_token: { type: String, index: true },
|
|
12
|
+
token_type: String,
|
|
13
|
+
expires_in: { type: Number, default: (0, load_config_1.getTokenExpiry)(), required: true },
|
|
14
|
+
last_accessed: { type: Date, default: Date.now, index: true },
|
|
15
|
+
}, {
|
|
16
|
+
perms: {
|
|
17
|
+
admin: "crud",
|
|
18
|
+
owner: "crud",
|
|
19
|
+
user: "",
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
TokenSchema.index({ expire_at: 1 }, { expireAfterSeconds: (0, load_config_1.getTokenExpiry)() });
|
|
23
|
+
const Token = schema_1.default.model("Token", TokenSchema);
|
|
24
|
+
exports.default = Token;
|
|
25
|
+
//# sourceMappingURL=token_model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token_model.js","sourceRoot":"","sources":["../../src/models/token_model.ts"],"names":[],"mappings":";;;;;AAAA,4DAAuC;AACvC,qDAAqD;AAcrD,MAAM,WAAW,GAAG,IAAI,gBAAS,CAChC;IACC,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE;IAC/C,QAAQ,EAAE,MAAM;IAChB,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;IAC3C,UAAU,EAAE,MAAM;IAClB,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAA,4BAAc,GAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;IACvE,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;CAC7D,EACD;IACC,KAAK,EAAE;QACN,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,EAAE;KACR;CACD,CACD,CAAC;AAEF,WAAW,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAA,4BAAc,GAAE,EAAE,CAAC,CAAC;AAE9E,MAAM,KAAK,GAAG,gBAAS,CAAC,KAAK,CAAS,OAAO,EAAE,WAAW,CAAC,CAAC;AAC5D,kBAAe,KAAK,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Types } from "mongoose";
|
|
2
|
+
export interface IUser {
|
|
3
|
+
_id?: Types.ObjectId;
|
|
4
|
+
name?: string;
|
|
5
|
+
urlid?: string;
|
|
6
|
+
email?: string;
|
|
7
|
+
password?: string;
|
|
8
|
+
admin?: boolean;
|
|
9
|
+
temp_hash?: string;
|
|
10
|
+
createdAt?: Date;
|
|
11
|
+
updatedAt?: Date;
|
|
12
|
+
}
|
|
13
|
+
declare const User: import("mongoose").Model<IUser, {}, {}, {}, any>;
|
|
14
|
+
export default User;
|
|
15
|
+
//# sourceMappingURL=user_model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user_model.d.ts","sourceRoot":"","sources":["../../src/models/user_model.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,WAAW,KAAK;IACrB,GAAG,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;CACjB;AAoCD,QAAA,MAAM,IAAI,kDAA6C,CAAC;AACxD,eAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const mongoose_friendly_1 = __importDefault(require("mongoose-friendly"));
|
|
7
|
+
const schema_1 = __importDefault(require("../libs/schema"));
|
|
8
|
+
function toLower(v) {
|
|
9
|
+
if (v)
|
|
10
|
+
return v.toLowerCase();
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
const UserSchema = new schema_1.default({
|
|
14
|
+
name: { type: String },
|
|
15
|
+
urlid: { type: String, unique: true, index: true },
|
|
16
|
+
email: { type: String, unique: true, index: true, set: toLower },
|
|
17
|
+
password: String,
|
|
18
|
+
admin: Boolean,
|
|
19
|
+
temp_hash: String,
|
|
20
|
+
}, {
|
|
21
|
+
perms: {
|
|
22
|
+
admin: "crud",
|
|
23
|
+
owner: "cru",
|
|
24
|
+
user: "r",
|
|
25
|
+
member: "r",
|
|
26
|
+
api: "r",
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
UserSchema.path("name").validate(function (v) {
|
|
30
|
+
return v && v.length > 0;
|
|
31
|
+
}, "Name cannot be empty");
|
|
32
|
+
UserSchema.plugin(mongoose_friendly_1.default, {
|
|
33
|
+
source: "name",
|
|
34
|
+
friendly: "urlid",
|
|
35
|
+
});
|
|
36
|
+
const User = schema_1.default.model("User", UserSchema);
|
|
37
|
+
exports.default = User;
|
|
38
|
+
//# sourceMappingURL=user_model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user_model.js","sourceRoot":"","sources":["../../src/models/user_model.ts"],"names":[],"mappings":";;;;;AAAA,0EAAyC;AACzC,4DAAuC;AAevC,SAAS,OAAO,CAAC,CAA4B;IAC5C,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9B,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,UAAU,GAAG,IAAI,gBAAS,CAC/B;IACC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IACtB,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;IAClD,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE;IAChE,QAAQ,EAAE,MAAM;IAChB,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,MAAM;CACjB,EACD;IACC,KAAK,EAAE;QACN,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,GAAG;QACT,MAAM,EAAE,GAAG;QACX,GAAG,EAAE,GAAG;KACR;CACD,CACD,CAAC;AAEF,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAS;IACnD,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1B,CAAC,EAAE,sBAAsB,CAAC,CAAC;AAE3B,UAAU,CAAC,MAAM,CAAC,2BAAQ,EAAE;IAC3B,MAAM,EAAE,MAAM;IACd,QAAQ,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG,gBAAS,CAAC,KAAK,CAAQ,MAAM,EAAE,UAAU,CAAC,CAAC;AACxD,kBAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Types } from "mongoose";
|
|
2
|
+
export interface IUserGroup {
|
|
3
|
+
_id?: Types.ObjectId;
|
|
4
|
+
user_id?: Types.ObjectId;
|
|
5
|
+
groups?: string[];
|
|
6
|
+
}
|
|
7
|
+
declare const UserGroup: import("mongoose").Model<IUserGroup, {}, {}, {}, any>;
|
|
8
|
+
export default UserGroup;
|
|
9
|
+
//# sourceMappingURL=usergroups_model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usergroups_model.d.ts","sourceRoot":"","sources":["../../src/models/usergroups_model.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,WAAW,UAAU;IAC1B,GAAG,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC;IACrB,OAAO,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAeD,QAAA,MAAM,SAAS,uDAA4D,CAAC;AAC5E,eAAe,SAAS,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const schema_1 = __importDefault(require("../libs/schema"));
|
|
7
|
+
const UserGroupSchema = new schema_1.default({
|
|
8
|
+
user_id: { type: global.ObjectId, index: true, unique: true, link: "User" },
|
|
9
|
+
groups: [String],
|
|
10
|
+
}, {
|
|
11
|
+
perms: {
|
|
12
|
+
admin: "crud",
|
|
13
|
+
user: "r",
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
const UserGroup = schema_1.default.model("Usergroup", UserGroupSchema);
|
|
17
|
+
exports.default = UserGroup;
|
|
18
|
+
//# sourceMappingURL=usergroups_model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usergroups_model.js","sourceRoot":"","sources":["../../src/models/usergroups_model.ts"],"names":[],"mappings":";;;;;AAAA,4DAAuC;AASvC,MAAM,eAAe,GAAG,IAAI,gBAAS,CACpC;IACC,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;IAC3E,MAAM,EAAE,CAAC,MAAM,CAAC;CAChB,EACD;IACC,KAAK,EAAE;QACN,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,GAAG;KACT;CACD,CACD,CAAC;AAEF,MAAM,SAAS,GAAG,gBAAS,CAAC,KAAK,CAAa,WAAW,EAAE,eAAe,CAAC,CAAC;AAC5E,kBAAe,SAAS,CAAC"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import type { Server } from "restify";
|
|
2
|
+
import type { Model } from "mongoose";
|
|
3
|
+
export type JXPHook = (req: JXPRequest, res: JXPResponse, next: () => void) => void | Promise<void>;
|
|
4
|
+
export type JXPCallback = (modelname: string, item: unknown, user: unknown, opts?: {
|
|
5
|
+
soft?: boolean;
|
|
6
|
+
}) => void;
|
|
7
|
+
export interface JXPQueryLimits {
|
|
8
|
+
enabled?: boolean;
|
|
9
|
+
large_collection_threshold?: number;
|
|
10
|
+
max?: number;
|
|
11
|
+
/** Applied when client omits ?limit= (secure default) */
|
|
12
|
+
default?: number;
|
|
13
|
+
require_limit_always?: boolean;
|
|
14
|
+
/** Skip countDocuments unless ?page= or ?count=true */
|
|
15
|
+
skip_count_unless_paginated?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface JXPSecurityConfig {
|
|
18
|
+
strip_fields?: string[];
|
|
19
|
+
filter_operators_deny?: string[];
|
|
20
|
+
aggregate_stages_allow?: string[];
|
|
21
|
+
bulk_operations_allow?: string[];
|
|
22
|
+
}
|
|
23
|
+
export interface JXPCorsConfig {
|
|
24
|
+
origins?: string[];
|
|
25
|
+
}
|
|
26
|
+
export interface JXPCacheConfig {
|
|
27
|
+
enabled?: boolean;
|
|
28
|
+
debug?: boolean;
|
|
29
|
+
ttl?: number;
|
|
30
|
+
}
|
|
31
|
+
export interface JXPOAuthProviderConfig {
|
|
32
|
+
auth_uri: string;
|
|
33
|
+
token_uri: string;
|
|
34
|
+
api_uri: string;
|
|
35
|
+
app_id: string;
|
|
36
|
+
app_secret: string;
|
|
37
|
+
scope?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface JXPConfig {
|
|
40
|
+
port?: number;
|
|
41
|
+
url?: string;
|
|
42
|
+
server?: string;
|
|
43
|
+
apikey?: string;
|
|
44
|
+
secret?: string;
|
|
45
|
+
shared_secret?: string;
|
|
46
|
+
model_dir?: string;
|
|
47
|
+
log?: string;
|
|
48
|
+
mongo?: {
|
|
49
|
+
connection_string?: string;
|
|
50
|
+
server?: string;
|
|
51
|
+
db?: string;
|
|
52
|
+
options?: Record<string, unknown>;
|
|
53
|
+
};
|
|
54
|
+
debug?: boolean;
|
|
55
|
+
/** When true, skip default console startup lines (use custom banner in bin/server). */
|
|
56
|
+
quiet_startup?: boolean;
|
|
57
|
+
throttle?: Record<string, unknown>;
|
|
58
|
+
token_expiry?: number;
|
|
59
|
+
refresh_token_expiry?: number;
|
|
60
|
+
password_recovery_url?: string;
|
|
61
|
+
smtp_server?: string;
|
|
62
|
+
smtp_username?: string;
|
|
63
|
+
smtp_password?: string;
|
|
64
|
+
smtp_from?: string;
|
|
65
|
+
cache?: JXPCacheConfig;
|
|
66
|
+
cache_timeout?: string;
|
|
67
|
+
query_limits?: JXPQueryLimits;
|
|
68
|
+
security?: JXPSecurityConfig;
|
|
69
|
+
cors?: JXPCorsConfig;
|
|
70
|
+
oauth?: {
|
|
71
|
+
success_uri?: string;
|
|
72
|
+
fail_uri?: string;
|
|
73
|
+
[provider: string]: JXPOAuthProviderConfig | string | undefined;
|
|
74
|
+
};
|
|
75
|
+
callbacks?: {
|
|
76
|
+
put?: JXPCallback;
|
|
77
|
+
post?: JXPCallback;
|
|
78
|
+
delete?: JXPCallback;
|
|
79
|
+
get?: JXPCallback;
|
|
80
|
+
getOne?: JXPCallback;
|
|
81
|
+
update?: JXPCallback;
|
|
82
|
+
};
|
|
83
|
+
pre_hooks?: {
|
|
84
|
+
login?: JXPHook;
|
|
85
|
+
get?: JXPHook;
|
|
86
|
+
getOne?: JXPHook;
|
|
87
|
+
post?: JXPHook;
|
|
88
|
+
put?: JXPHook;
|
|
89
|
+
update?: JXPHook;
|
|
90
|
+
delete?: JXPHook;
|
|
91
|
+
};
|
|
92
|
+
post_hooks?: {
|
|
93
|
+
login?: (req: JXPRequest, res: JXPResponse) => void | Promise<void>;
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/** Restify request extended by JXP middleware. */
|
|
97
|
+
export interface JXPRequest {
|
|
98
|
+
params: Record<string, string>;
|
|
99
|
+
query: Record<string, unknown>;
|
|
100
|
+
body?: Record<string, unknown>;
|
|
101
|
+
headers: Record<string, string | string[] | undefined>;
|
|
102
|
+
method: string;
|
|
103
|
+
route?: {
|
|
104
|
+
name?: string;
|
|
105
|
+
};
|
|
106
|
+
modelname?: string;
|
|
107
|
+
Model?: Model<unknown>;
|
|
108
|
+
config: JXPConfig;
|
|
109
|
+
username?: string;
|
|
110
|
+
path(): string;
|
|
111
|
+
}
|
|
112
|
+
/** Restify response extended by JXP middleware. */
|
|
113
|
+
export interface JXPResponse {
|
|
114
|
+
user?: {
|
|
115
|
+
_id: unknown;
|
|
116
|
+
email?: string;
|
|
117
|
+
name?: string;
|
|
118
|
+
admin?: boolean;
|
|
119
|
+
};
|
|
120
|
+
groups?: string[];
|
|
121
|
+
token?: unknown;
|
|
122
|
+
refresh_token?: unknown;
|
|
123
|
+
username?: string;
|
|
124
|
+
result?: unknown;
|
|
125
|
+
jxp_cache_key?: string;
|
|
126
|
+
header(name: string, value?: string): unknown;
|
|
127
|
+
send(body?: unknown): unknown;
|
|
128
|
+
json(body?: unknown): unknown;
|
|
129
|
+
writeHead(code: number, headers?: Record<string, unknown>): void;
|
|
130
|
+
write(chunk: string | Buffer): void;
|
|
131
|
+
end(chunk?: string | Buffer): void;
|
|
132
|
+
}
|
|
133
|
+
export type JXPFactory = (options: JXPConfig) => Server;
|
|
134
|
+
//# sourceMappingURL=jxp-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jxp-config.d.ts","sourceRoot":"","sources":["../../src/types/jxp-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jxp-config.js","sourceRoot":"","sources":["../../src/types/jxp-config.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { SchemaDefinitionProperty, SchemaTypeOptions } from "mongoose";
|
|
2
|
+
/** JXP field extensions on top of Mongoose schema types. */
|
|
3
|
+
export interface JXPFieldDefinition extends SchemaTypeOptions<unknown> {
|
|
4
|
+
link?: string;
|
|
5
|
+
map_to?: string;
|
|
6
|
+
virtual?: string;
|
|
7
|
+
justOne?: boolean;
|
|
8
|
+
alias?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface JXPAdvancedQueries {
|
|
11
|
+
query?: boolean;
|
|
12
|
+
aggregate?: boolean;
|
|
13
|
+
bulkwrite?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface JXPSchemaOptions {
|
|
16
|
+
perms?: Partial<Record<"admin" | "owner" | "user" | "all" | string, string>>;
|
|
17
|
+
timestamps?: boolean;
|
|
18
|
+
toJSON?: {
|
|
19
|
+
virtuals?: boolean;
|
|
20
|
+
};
|
|
21
|
+
toObject?: {
|
|
22
|
+
virtuals?: boolean;
|
|
23
|
+
};
|
|
24
|
+
query_limits?: {
|
|
25
|
+
enabled?: boolean;
|
|
26
|
+
large_collection_threshold?: number;
|
|
27
|
+
max?: number;
|
|
28
|
+
};
|
|
29
|
+
/** Static method names exposed via GET/POST /call/:modelname/:method_name */
|
|
30
|
+
callable_statics?: string[];
|
|
31
|
+
/** Opt out of HTTP advanced endpoints per model (default: query/aggregate on, bulkwrite off) */
|
|
32
|
+
advanced_queries?: JXPAdvancedQueries;
|
|
33
|
+
[key: string]: unknown;
|
|
34
|
+
}
|
|
35
|
+
export type JXPDefinition = Record<string, JXPFieldDefinition | JXPFieldDefinition[] | SchemaDefinitionProperty<unknown> | SchemaDefinitionProperty<unknown>[]>;
|
|
36
|
+
export interface JXPPerms {
|
|
37
|
+
admin: string;
|
|
38
|
+
owner: string;
|
|
39
|
+
user: string;
|
|
40
|
+
all: string;
|
|
41
|
+
[key: string]: string;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=schema-fields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-fields.d.ts","sourceRoot":"","sources":["../../src/types/schema-fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE5E,4DAA4D;AAC5D,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB,CAAC,OAAO,CAAC;IACrE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAChC,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAChC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAClC,YAAY,CAAC,EAAE;QACd,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,0BAA0B,CAAC,EAAE,MAAM,CAAC;QACpC,GAAG,CAAC,EAAE,MAAM,CAAC;KACb,CAAC;IACF,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gGAAgG;IAChG,gBAAgB,CAAC,EAAE,kBAAkB,CAAC;IACtC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,CACjC,MAAM,EACJ,kBAAkB,GAClB,kBAAkB,EAAE,GACpB,wBAAwB,CAAC,OAAO,CAAC,GACjC,wBAAwB,CAAC,OAAO,CAAC,EAAE,CACrC,CAAC;AAEF,MAAM,WAAW,QAAQ;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-fields.js","sourceRoot":"","sources":["../../src/types/schema-fields.ts"],"names":[],"mappings":""}
|
package/docs/aggregations.md
CHANGED
|
@@ -1,25 +1,39 @@
|
|
|
1
1
|
# Aggregation Queries
|
|
2
2
|
|
|
3
|
-
You can apply an aggregation pipeline through the `/aggregate/<modelname>` endpoint. See [MongoDB's aggregation documentation](https://
|
|
3
|
+
You can apply an aggregation pipeline through the `/aggregate/<modelname>` endpoint. See [MongoDB's aggregation documentation](https://www.mongodb.com/docs/manual/aggregation/).
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
Only allowlisted stages are permitted (e.g. `$match`, `$group`, `$lookup`, `$project`, `$sort`, `$limit`). Stages such as `$out`, `$merge`, and `$function` require an admin user. Disable per model with `advanced_queries: { aggregate: false }`.
|
|
6
|
+
|
|
7
|
+
POST the pipeline as a **JSON array**, or wrap it in a `"query"` property. Both forms are accepted:
|
|
8
|
+
|
|
9
|
+
```json
|
|
10
|
+
[
|
|
11
|
+
{
|
|
12
|
+
"$group": {
|
|
13
|
+
"_id": null,
|
|
14
|
+
"count": {
|
|
15
|
+
"$sum": 1
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
```json
|
|
7
23
|
{
|
|
8
24
|
"query": [
|
|
9
25
|
{
|
|
10
|
-
"$group": {
|
|
26
|
+
"$group": {
|
|
11
27
|
"_id": null,
|
|
12
|
-
"count": {
|
|
13
|
-
"$sum": 1
|
|
14
|
-
}
|
|
15
|
-
}
|
|
28
|
+
"count": {
|
|
29
|
+
"$sum": 1
|
|
30
|
+
}
|
|
31
|
+
}
|
|
16
32
|
}
|
|
17
33
|
]
|
|
18
34
|
}
|
|
19
35
|
```
|
|
20
36
|
|
|
21
|
-
* Note that embedding in a "query" is no longer necessary
|
|
22
|
-
|
|
23
37
|
### Aggregations with ObjectIds
|
|
24
38
|
|
|
25
39
|
Because we can't define ObjectIds in our aggregate functions, we need to send the ObjectIds as strings and then convert them in the pipeline.
|
|
@@ -27,12 +41,13 @@ Because we can't define ObjectIds in our aggregate functions, we need to send th
|
|
|
27
41
|
There are two ways of doing this. We can embed `"ObjectId(\"<your object id>\")"` or you can convert in the pipeline. Embedding will be faster on execution.
|
|
28
42
|
|
|
29
43
|
Embedding:
|
|
30
|
-
|
|
44
|
+
|
|
45
|
+
```json
|
|
31
46
|
{
|
|
32
47
|
"query": [
|
|
33
48
|
{
|
|
34
49
|
"$match": {
|
|
35
|
-
"
|
|
50
|
+
"campaign_id": "ObjectId(\"5fd45d05f2b93af8d59588fb\")"
|
|
36
51
|
}
|
|
37
52
|
}
|
|
38
53
|
]
|
|
@@ -40,13 +55,14 @@ Embedding:
|
|
|
40
55
|
```
|
|
41
56
|
|
|
42
57
|
Using a pipeline to add a field:
|
|
43
|
-
|
|
58
|
+
|
|
59
|
+
```json
|
|
44
60
|
{
|
|
45
61
|
"query": [
|
|
46
|
-
{
|
|
62
|
+
{
|
|
47
63
|
"$addFields": {
|
|
48
64
|
"campaign_id_obj": {
|
|
49
|
-
"$toObjectId":
|
|
65
|
+
"$toObjectId": "5fd45d05f2b93af8d59588fb"
|
|
50
66
|
}
|
|
51
67
|
}
|
|
52
68
|
},
|
|
@@ -70,12 +86,13 @@ Because we can't define Date objects in our aggregate functions, we need to send
|
|
|
70
86
|
There are two ways of doing this. We can embed `"new Date(\"<your date>\")"` or you can convert in the pipeline. Embedding will be faster on execution.
|
|
71
87
|
|
|
72
88
|
Embedding:
|
|
73
|
-
|
|
89
|
+
|
|
90
|
+
```json
|
|
74
91
|
{
|
|
75
92
|
"query": [
|
|
76
93
|
{
|
|
77
94
|
"$match": {
|
|
78
|
-
"
|
|
95
|
+
"timestamp": {
|
|
79
96
|
"$gte": "new Date(\"2021-03-03T00:00:00.0Z\")"
|
|
80
97
|
}
|
|
81
98
|
}
|
|
@@ -85,7 +102,8 @@ Embedding:
|
|
|
85
102
|
```
|
|
86
103
|
|
|
87
104
|
Using a pipeline to add a date field:
|
|
88
|
-
|
|
105
|
+
|
|
106
|
+
```json
|
|
89
107
|
{
|
|
90
108
|
"query": [
|
|
91
109
|
{
|
|
@@ -115,12 +133,13 @@ Using a pipeline to add a date field:
|
|
|
115
133
|
Say you want to use a date relative to today's date, you can use `relative_date(offset, offset_unit, startof_unit, endof_unit)`, similar to the method of embedding in a string above. It will also take `null` as a value.
|
|
116
134
|
|
|
117
135
|
Eg. to get the beginning of this month:
|
|
118
|
-
|
|
136
|
+
|
|
137
|
+
```json
|
|
119
138
|
{
|
|
120
139
|
"query": [
|
|
121
140
|
{
|
|
122
141
|
"$match": {
|
|
123
|
-
"
|
|
142
|
+
"timestamp": {
|
|
124
143
|
"$gte": "relative_date(null, null, \"month\")"
|
|
125
144
|
}
|
|
126
145
|
}
|
|
@@ -131,4 +150,4 @@ Eg. to get the beginning of this month:
|
|
|
131
150
|
|
|
132
151
|
### AllowDiskUse
|
|
133
152
|
|
|
134
|
-
|
|
153
|
+
Aggregates can use a lot of memory. If you're unable to complete your query, try using the disk. To enable `allowDiskUse`, add `?allowDiskUse=true` as a query parameter to the calling URL.
|