Skip to content

Commit

Permalink
feat: added debug flag in the SuperTokenConfig in the init() fo…
Browse files Browse the repository at this point in the history
…r logging (#732)

* feat: added debug flag in the SuperTokenConfig in the init() for logging

* updated changelog and versions

* removed unused import

* updated build

* fix: added config test for debug mode

* updated tests

* test: updated the test to check for actual log strings

* fixes tests

* version change

* removes unneeded export

---------

Co-authored-by: rishabhpoddar <rishabh.poddar@gmail.com>
  • Loading branch information
IamMayankThakur and rishabhpoddar authored Oct 31, 2023
1 parent 9bdbd48 commit 841c7b3
Show file tree
Hide file tree
Showing 15 changed files with 157 additions and 11 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html)

## [16.4.0] - 2023-10-26

- Added `debug` property to `TypeInput`. When set to `true`, it will enable debug logs.

## [16.3.4] - 2023-10-22

### Fixes
Expand Down
3 changes: 2 additions & 1 deletion lib/build/logger.d.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 5 additions & 1 deletion lib/build/logger.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions lib/build/supertokens.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions lib/build/types.d.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion lib/build/version.d.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion lib/build/version.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 5 additions & 1 deletion lib/ts/logger.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@ function logDebugMessage(message: string) {
}
}

function enableDebugLogs() {
debug.enable(SUPERTOKENS_DEBUG_NAMESPACE);
}

let getFileLocation = () => {
let errorObject = new Error();
if (errorObject.stack === undefined) {
Expand All @@ -50,4 +54,4 @@ let getFileLocation = () => {
return "N/A";
};

export { logDebugMessage };
export { logDebugMessage, enableDebugLogs };
6 changes: 5 additions & 1 deletion lib/ts/supertokens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import NormalisedURLPath from "./normalisedURLPath";
import type { BaseRequest, BaseResponse } from "./framework";
import type { TypeFramework } from "./framework/types";
import STError from "./error";
import { logDebugMessage } from "./logger";
import { enableDebugLogs, logDebugMessage } from "./logger";
import { PostSuperTokensInitCallbacks } from "./postSuperTokensInitCallbacks";
import { DEFAULT_TENANT_ID } from "./recipe/multitenancy/constants";

Expand All @@ -49,6 +49,10 @@ export default class SuperTokens {
telemetryEnabled: boolean;

constructor(config: TypeInput) {
if (config.debug === true) {
enableDebugLogs();
}

logDebugMessage("Started SuperTokens with debug logging (supertokens.init called)");
const originToPrint =
config.appInfo.origin === undefined
Expand Down
1 change: 1 addition & 0 deletions lib/ts/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ export type TypeInput = {
recipeList: RecipeListFunction[];
telemetry?: boolean;
isInServerlessEnv?: boolean;
debug?: boolean;
};

export type RecipeListFunction = (appInfo: NormalisedAppinfo, isInServerlessEnv: boolean) => RecipeModule;
Expand Down
2 changes: 1 addition & 1 deletion lib/ts/version.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
* License for the specific language governing permissions and limitations
* under the License.
*/
export const version = "16.3.4";
export const version = "16.4.0";

export const cdiSupported = ["4.0"];

Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "supertokens-node",
"version": "16.3.4",
"version": "16.4.0",
"description": "NodeJS driver for SuperTokens core",
"main": "index.js",
"scripts": {
Expand Down
120 changes: 120 additions & 0 deletions test/config.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ const {
} = require("./utils");
const request = require("supertest");
const express = require("express");
const debug = require("debug");
let STExpress = require("../");
let Session = require("../recipe/session");
let SessionRecipe = require("../lib/build/recipe/session/recipe").default;
Expand All @@ -41,6 +42,7 @@ let EmailPassword = require("../lib/build/recipe/emailpassword");
let EmailPasswordRecipe = require("../lib/build/recipe/emailpassword/recipe").default;
const { getTopLevelDomainForSameSiteResolution } = require("../lib/build/utils");
const { middleware } = require("../framework/express");
const { logDebugMessage } = require("../lib/build/logger");

describe(`configTest: ${printPath("[test/config.test.js]")}`, function () {
beforeEach(async function () {
Expand Down Expand Up @@ -1192,6 +1194,124 @@ describe(`configTest: ${printPath("[test/config.test.js]")}`, function () {
}
});

it("testing that the debug mode is set", async function () {
const connectionURI = await startST();
let logs = []; // Used to capture the log strings
debug.log = function (...args) {
logs.push(args);
};

{
STExpress.init({
supertokens: {
connectionURI,
},
appInfo: {
apiDomain: "api.supertokens.io",
appName: "SuperTokens",
websiteDomain: "supertokens.io",
},
recipeList: [Session.init({ getTokenTransferMethod: () => "cookie" })],
debug: true,
});
logDebugMessage("test message successfully logged");
assert(logs.length > 0);
const logMessage = logs[logs.length - 1].find((log) => log.includes("test message successfully logged"));
assert(logMessage !== undefined);
resetAll();
}

{
logs = [];
STExpress.init({
supertokens: {
connectionURI,
},
appInfo: {
apiDomain: "api.supertokens.io",
appName: "SuperTokens",
websiteDomain: "supertokens.io",
},
recipeList: [Session.init({ getTokenTransferMethod: () => "cookie" })],
debug: false,
});
logDebugMessage("test message - should not be logged");
assert(logs.length === 0);
resetAll();
}

{
logs = [];
STExpress.init({
supertokens: {
connectionURI,
},
appInfo: {
apiDomain: "api.supertokens.io",
appName: "SuperTokens",
websiteDomain: "supertokens.io",
},
recipeList: [Session.init({ getTokenTransferMethod: () => "cookie" })],
});
logDebugMessage("test message - should not be logged");
assert(logs.length === 0);
resetAll();
}
});

it("testing that the debug mode is set via env var", async function () {
let oldEnv = process.env;
const connectionURI = await startST();
let logs = []; // Used to capture the log strings
debug.log = function (...args) {
logs.push(args);
};

{
process.env = { ...oldEnv, DEBUG: "com.supertokens" };
let debugManual = require("debug/src/common");
debugManual(debug);
STExpress.init({
supertokens: {
connectionURI,
},
appInfo: {
apiDomain: "api.supertokens.io",
appName: "SuperTokens",
websiteDomain: "supertokens.io",
},
recipeList: [Session.init({ getTokenTransferMethod: () => "cookie" })],
});
logDebugMessage("test message successfully logged");
assert(logs.length > 0);
const logMessage = logs[logs.length - 1].find((log) => log.includes("test message successfully logged"));
assert(logMessage !== undefined);
resetAll(false);
}

process.env = { ...oldEnv };
let debugManual = require("debug/src/common");
debugManual(debug);

{
logs = [];
STExpress.init({
supertokens: {
connectionURI,
},
appInfo: {
apiDomain: "api.supertokens.io",
appName: "SuperTokens",
websiteDomain: "supertokens.io",
},
recipeList: [Session.init({ getTokenTransferMethod: () => "cookie" })],
});
logDebugMessage("test message - should not be logged");
assert(logs.length === 0);
resetAll();
}
});

it("checking for default cookie config", async function () {
const connectionURI = await startST();
STExpress.init({
Expand Down
6 changes: 5 additions & 1 deletion test/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ let { maxVersion } = require("../lib/build/utils");
const { default: OpenIDRecipe } = require("../lib/build/recipe/openid/recipe");
const { wrapRequest } = require("../framework/express");
const { join } = require("path");
let debug = require("debug");

const users = require("./users.json");
let assert = require("assert");
Expand Down Expand Up @@ -249,7 +250,7 @@ module.exports.stopST = async function (pid) {
throw new Error("error while stopping ST with PID: " + pid);
};

module.exports.resetAll = function () {
module.exports.resetAll = function (disableLogging = true) {
SuperTokens.reset();
AccountLinkingRecipe.reset();
SessionRecipe.reset();
Expand All @@ -267,6 +268,9 @@ module.exports.resetAll = function () {
DashboardRecipe.reset();
ProcessState.getInstance().reset();
MultitenancyRecipe.reset();
if (disableLogging) {
debug.disable();
}
};

module.exports.killAllST = async function () {
Expand Down

0 comments on commit 841c7b3

Please sign in to comment.