@openinc/parse-server-opendash 3.6.2 → 3.7.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.
@@ -0,0 +1 @@
1
+ export declare function init(name: string): Promise<void>;
@@ -0,0 +1,65 @@
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
+ exports.init = init;
7
+ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
8
+ const jwks_rsa_1 = __importDefault(require("jwks-rsa"));
9
+ const crypto_1 = require("crypto");
10
+ const tenantId = process.env.MICROSOFT_TENANT_ID;
11
+ const appId = process.env.MICROSOFT_APP_ID;
12
+ // Setup JWKS client for Microsoft (replace TENANT_ID)
13
+ const client = (0, jwks_rsa_1.default)({
14
+ jwksUri: `https://login.microsoftonline.com/${tenantId}/discovery/v2.0/keys`,
15
+ });
16
+ function getKey(header, callback) {
17
+ if (!header.kid) {
18
+ return callback(new Error("No kid found in token header"));
19
+ }
20
+ client.getSigningKey(header.kid, (err, key) => {
21
+ if (err || !key) {
22
+ return callback(err || new Error("Key not found"));
23
+ }
24
+ const signingKey = key.getPublicKey();
25
+ callback(null, signingKey);
26
+ });
27
+ }
28
+ async function init(name) {
29
+ Parse.Cloud.define(name, async (request) => {
30
+ const token = request.params.token;
31
+ const account = request.params.account;
32
+ if (!token) {
33
+ throw new Parse.Error(Parse.Error.INVALID_JSON, "Token missing");
34
+ }
35
+ const verifiedPayload = await new Promise((resolve, reject) => {
36
+ jsonwebtoken_1.default.verify(token, getKey, {
37
+ audience: appId,
38
+ issuer: `https://login.microsoftonline.com/${tenantId}/v2.0`,
39
+ }, (err, decoded) => {
40
+ if (err)
41
+ return reject(err);
42
+ resolve(decoded);
43
+ });
44
+ });
45
+ let user = await new Parse.Query(Parse.User)
46
+ .equalTo("username", verifiedPayload.oid)
47
+ .first({ useMasterKey: true });
48
+ if (!user) {
49
+ user = new Parse.User();
50
+ user.set("username", verifiedPayload.oid);
51
+ user.set("email", account.username);
52
+ user.set("password", (0, crypto_1.randomBytes)(16).toString("hex")); // Generate a random password
53
+ user.set("name", verifiedPayload.name || verifiedPayload.preferred_username);
54
+ user = await user.signUp(null, { useMasterKey: true });
55
+ return user.getSessionToken();
56
+ }
57
+ const sessionToken = "r:" + (0, crypto_1.randomBytes)(16).toString("hex");
58
+ const session = new Parse.Object("_Session");
59
+ session.set("user", user);
60
+ session.set("sessionToken", sessionToken);
61
+ session.set("expiresAt", new Date(Date.now() + 24 * 60 * 60 * 1000 * 7)); // 7 day expiration
62
+ const savedSession = await session.save(null, { useMasterKey: true });
63
+ return savedSession.get("sessionToken");
64
+ });
65
+ }
package/dist/index.js CHANGED
@@ -540,7 +540,6 @@ async function autoloadCloudCode(path, regex = /^[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*$
540
540
  for (const name of fns) {
541
541
  const { init } = require((0, path_1.join)(path, name));
542
542
  if (!init || typeof init !== "function") {
543
- console.warn(`[@openinc/parse-server-opendash] No init() function found in ${name}.js`);
544
543
  continue;
545
544
  }
546
545
  console.log(`[@openinc/parse-server-opendash] Autoloading ${name}.js`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openinc/parse-server-opendash",
3
- "version": "3.6.2",
3
+ "version": "3.7.0",
4
4
  "description": "Parse Server Cloud Code for open.INC Stack.",
5
5
  "packageManager": "pnpm@10.11.0",
6
6
  "keywords": [
@@ -68,6 +68,7 @@
68
68
  "dayjs": "^1.11.13",
69
69
  "fast-equals": "^5.2.2",
70
70
  "jsonwebtoken": "^9.0.2",
71
+ "jwks-rsa": "^3.2.0",
71
72
  "nodemailer": "^6.10.1",
72
73
  "nunjucks": "^3.2.4",
73
74
  "parse-server": "^8.2.0",