@memberjunction/sqlserver-dataprovider 6.1.0-edge.1 → 6.1.0-edge.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/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/package.json +16 -16
- package/dist/UserCache.d.ts +0 -35
- package/dist/UserCache.d.ts.map +0 -1
- package/dist/UserCache.js +0 -78
- package/dist/UserCache.js.map +0 -1
package/dist/config.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { LogError, LogStatus, SetProvider, StartupManager } from "@memberjunction/core";
|
|
2
2
|
import { SQLServerDataProvider } from "./SQLServerDataProvider.js";
|
|
3
|
-
import { UserCache } from "
|
|
3
|
+
import { UserCache } from "@memberjunction/generic-database-provider";
|
|
4
4
|
/**
|
|
5
5
|
* Sets up the SQL Server provider and runs MJ startup.
|
|
6
6
|
*
|
|
@@ -21,7 +21,7 @@ export async function setupSQLServerClient(config, startupOptions) {
|
|
|
21
21
|
SetProvider(provider);
|
|
22
22
|
// now setup the user cache
|
|
23
23
|
// CheckRefreshIntervalSeconds is in SECONDS; UserCache.Refresh expects MILLISECONDS -> convert.
|
|
24
|
-
await UserCache.Instance.Refresh(
|
|
24
|
+
await UserCache.Instance.Refresh(provider, config.CheckRefreshIntervalSeconds * 1000);
|
|
25
25
|
if (config.CheckRefreshIntervalSeconds && config.CheckRefreshIntervalSeconds > 0) {
|
|
26
26
|
// Start a timer to check for refreshes
|
|
27
27
|
setInterval(async () => {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAkB,MAAM,sBAAsB,CAAC;AACxG,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,OAAO,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAkB,MAAM,sBAAsB,CAAC;AACxG,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,OAAO,EAAE,SAAS,EAAE,MAAM,2CAA2C,CAAC;AAGtE;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAAmC,EAAE,cAA+B;IAC3G,IAAI,CAAC;QACD,2HAA2H;QAC3H,MAAM,IAAI,GAAuB,MAAM,CAAC,cAAc,CAAC;QACvD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,MAAM,QAAQ,GAAG,IAAI,qBAAqB,EAAE,CAAA;YAC5C,MAAM,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAE9B,yDAAyD;YACzD,WAAW,CAAC,QAAQ,CAAC,CAAC;YAEtB,2BAA2B;YAC3B,gGAAgG;YAChG,MAAM,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,2BAA2B,GAAG,IAAI,CAAC,CAAC;YAEtF,IAAI,MAAM,CAAC,2BAA2B,IAAI,MAAM,CAAC,2BAA2B,GAAG,CAAC,EAAE,CAAC;gBAC/E,uCAAuC;gBACvC,WAAW,CAAC,KAAK,IAAI,EAAE;oBACnB,IAAI,CAAC;wBACD,MAAM,QAAQ,CAAC,eAAe,EAAE,CAAC;oBACrC,CAAC;oBACD,OAAO,CAAC,EAAE,CAAC;wBACP,QAAQ,CAAC,4BAA4B,EAAE,CAAC,CAAC,CAAA;oBAC7C,CAAC;gBACL,CAAC,EAAE,MAAM,CAAC,2BAA2B,GAAG,IAAI,CAAC,CAAA;YACjD,CAAC;YAED,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;YACnD,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAG,OAAO,CAAC,CAAC;YACzF,MAAM,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;YAEjG,OAAO,QAAQ,CAAC;QACpB,CAAC;aACI,CAAC;YACF,uCAAuC;YACvC,SAAS,CAAC,iEAAiE,CAAC,CAAA;YAC5E,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACrB,IAAI,IAAI,CAAC,SAAS;gBACd,OAAO,oBAAoB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA,CAAC,oDAAoD;;gBAExG,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC,yDAAyD;QACnH,CAAC;IACL,CAAC;IACD,OAAO,CAAC,EAAE,CAAC;QACP,MAAM,YAAY,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,QAAQ,CAAC,kCAAkC,YAAY,KAAK,UAAU,EAAE,CAAC,CAAC;QAC1E,MAAM,CAAC,CAAC,CAAC,6CAA6C;IAC1D,CAAC;AACL,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export { setupSQLServerClient } from "./config.js";
|
|
2
2
|
export { SQLServerDataProvider } from "./SQLServerDataProvider.js";
|
|
3
3
|
export { ExecuteSQLOptions, SQLServerProviderConfigData, } from "./types.js";
|
|
4
|
-
export { UserCache } from "./UserCache.js";
|
|
5
4
|
export { NodeFileSystemProvider } from "./NodeFileSystemProvider.js";
|
|
6
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EACL,iBAAiB,EACjB,2BAA2B,GAC5B,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EACL,iBAAiB,EACjB,2BAA2B,GAC5B,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export { setupSQLServerClient } from "./config.js";
|
|
2
2
|
export { SQLServerDataProvider } from "./SQLServerDataProvider.js";
|
|
3
3
|
export { SQLServerProviderConfigData, } from "./types.js";
|
|
4
|
-
export { UserCache } from "./UserCache.js";
|
|
5
4
|
export { NodeFileSystemProvider } from "./NodeFileSystemProvider.js";
|
|
6
5
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAEL,2BAA2B,GAC5B,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAEL,2BAA2B,GAC5B,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/sqlserver-dataprovider",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "6.1.0-edge.
|
|
4
|
+
"version": "6.1.0-edge.2",
|
|
5
5
|
"description": "MemberJunction: SQL Server Client Data Provider",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -18,21 +18,21 @@
|
|
|
18
18
|
"@types/mssql": "^9.1.9"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@memberjunction/actions": "6.1.0-edge.
|
|
22
|
-
"@memberjunction/actions-base": "6.1.0-edge.
|
|
23
|
-
"@memberjunction/ai": "6.1.0-edge.
|
|
24
|
-
"@memberjunction/ai-provider-bundle": "6.1.0-edge.
|
|
25
|
-
"@memberjunction/ai-vector-dupe": "6.1.0-edge.
|
|
26
|
-
"@memberjunction/ai-vectordb": "6.1.0-edge.
|
|
27
|
-
"@memberjunction/aiengine": "6.1.0-edge.
|
|
28
|
-
"@memberjunction/core": "6.1.0-edge.
|
|
29
|
-
"@memberjunction/core-entities": "6.1.0-edge.
|
|
30
|
-
"@memberjunction/encryption": "6.1.0-edge.
|
|
31
|
-
"@memberjunction/generic-database-provider": "6.1.0-edge.
|
|
32
|
-
"@memberjunction/sql-dialect": "6.1.0-edge.
|
|
33
|
-
"@memberjunction/global": "6.1.0-edge.
|
|
34
|
-
"@memberjunction/query-processor": "6.1.0-edge.
|
|
35
|
-
"@memberjunction/queue": "6.1.0-edge.
|
|
21
|
+
"@memberjunction/actions": "6.1.0-edge.2",
|
|
22
|
+
"@memberjunction/actions-base": "6.1.0-edge.2",
|
|
23
|
+
"@memberjunction/ai": "6.1.0-edge.2",
|
|
24
|
+
"@memberjunction/ai-provider-bundle": "6.1.0-edge.2",
|
|
25
|
+
"@memberjunction/ai-vector-dupe": "6.1.0-edge.2",
|
|
26
|
+
"@memberjunction/ai-vectordb": "6.1.0-edge.2",
|
|
27
|
+
"@memberjunction/aiengine": "6.1.0-edge.2",
|
|
28
|
+
"@memberjunction/core": "6.1.0-edge.2",
|
|
29
|
+
"@memberjunction/core-entities": "6.1.0-edge.2",
|
|
30
|
+
"@memberjunction/encryption": "6.1.0-edge.2",
|
|
31
|
+
"@memberjunction/generic-database-provider": "6.1.0-edge.2",
|
|
32
|
+
"@memberjunction/sql-dialect": "6.1.0-edge.2",
|
|
33
|
+
"@memberjunction/global": "6.1.0-edge.2",
|
|
34
|
+
"@memberjunction/query-processor": "6.1.0-edge.2",
|
|
35
|
+
"@memberjunction/queue": "6.1.0-edge.2",
|
|
36
36
|
"mssql": "^12.2.0",
|
|
37
37
|
"rxjs": "^7.8.2",
|
|
38
38
|
"uuid": "^13.0.0"
|
package/dist/UserCache.d.ts
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { UserInfo } from "@memberjunction/core";
|
|
2
|
-
import { BaseSingleton } from "@memberjunction/global";
|
|
3
|
-
import sql from 'mssql';
|
|
4
|
-
/**
|
|
5
|
-
* Server side cache of users and their roles.
|
|
6
|
-
*
|
|
7
|
-
* Uses BaseSingleton to guarantee a single instance across the entire process,
|
|
8
|
-
* even if bundlers duplicate this module across multiple execution paths.
|
|
9
|
-
*/
|
|
10
|
-
export declare class UserCache extends BaseSingleton<UserCache> {
|
|
11
|
-
private _users;
|
|
12
|
-
/**
|
|
13
|
-
* Use UserCache.Instance to get the singleton instance.
|
|
14
|
-
*/
|
|
15
|
-
constructor();
|
|
16
|
-
get SYSTEM_USER_ID(): string;
|
|
17
|
-
GetSystemUser(): UserInfo;
|
|
18
|
-
/**
|
|
19
|
-
* This method will refresh the cache with the latest data from the database
|
|
20
|
-
* @param pool - the connection pool to use to refresh the cache
|
|
21
|
-
* @param autoRefreshIntervalMS - optional, if provided, the cache will be refreshed every interval as specified - denominated in milliseconds
|
|
22
|
-
*/
|
|
23
|
-
Refresh(pool: sql.ConnectionPool, autoRefreshIntervalMS?: number): Promise<void>;
|
|
24
|
-
static get Instance(): UserCache;
|
|
25
|
-
get Users(): UserInfo[];
|
|
26
|
-
static get Users(): UserInfo[];
|
|
27
|
-
/**
|
|
28
|
-
* Convenience method to get a user by their name
|
|
29
|
-
* @param name - name of the user
|
|
30
|
-
* @param caseSensitive - optional, if true, the search will be case sensitive
|
|
31
|
-
* @returns
|
|
32
|
-
*/
|
|
33
|
-
UserByName(name: string, caseSensitive?: boolean): UserInfo | undefined;
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=UserCache.d.ts.map
|
package/dist/UserCache.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UserCache.d.ts","sourceRoot":"","sources":["../src/UserCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAc,MAAM,wBAAwB,CAAC;AACnE,OAAO,GAAG,MAAM,OAAO,CAAC;AAIxB;;;;;GAKG;AACH,qBAAa,SAAU,SAAQ,aAAa,CAAC,SAAS,CAAC;IACnD,OAAO,CAAC,MAAM,CAAa;IAE3B;;OAEG;;IAKH,IAAW,cAAc,IAAI,MAAM,CAElC;IAEM,aAAa,IAAI,QAAQ;IAIhC;;;;OAIG;IACU,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,cAAc,EAAE,qBAAqB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B7F,WAAkB,QAAQ,IAAI,SAAS,CAEtC;IAED,IAAW,KAAK,IAAI,QAAQ,EAAE,CAE7B;IAED,MAAM,KAAK,KAAK,IAAI,QAAQ,EAAE,CAE7B;IAED;;;;;OAKG;IACI,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,GAAE,OAAe,GAAG,QAAQ,GAAG,SAAS;CAOxF"}
|
package/dist/UserCache.js
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { LogError, Metadata, UserInfo } from "@memberjunction/core";
|
|
2
|
-
import { BaseSingleton, UUIDsEqual } from "@memberjunction/global";
|
|
3
|
-
import sql from 'mssql';
|
|
4
|
-
const SYSTEM_USER_ID = 'ecafccec-6a37-ef11-86d4-000d3a4e707e';
|
|
5
|
-
/**
|
|
6
|
-
* Server side cache of users and their roles.
|
|
7
|
-
*
|
|
8
|
-
* Uses BaseSingleton to guarantee a single instance across the entire process,
|
|
9
|
-
* even if bundlers duplicate this module across multiple execution paths.
|
|
10
|
-
*/
|
|
11
|
-
export class UserCache extends BaseSingleton {
|
|
12
|
-
/**
|
|
13
|
-
* Use UserCache.Instance to get the singleton instance.
|
|
14
|
-
*/
|
|
15
|
-
constructor() {
|
|
16
|
-
super();
|
|
17
|
-
}
|
|
18
|
-
get SYSTEM_USER_ID() {
|
|
19
|
-
return SYSTEM_USER_ID;
|
|
20
|
-
}
|
|
21
|
-
GetSystemUser() {
|
|
22
|
-
return this.Users.find((u) => u.ID.toLowerCase() === UserCache.Instance.SYSTEM_USER_ID.toLowerCase());
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* This method will refresh the cache with the latest data from the database
|
|
26
|
-
* @param pool - the connection pool to use to refresh the cache
|
|
27
|
-
* @param autoRefreshIntervalMS - optional, if provided, the cache will be refreshed every interval as specified - denominated in milliseconds
|
|
28
|
-
*/
|
|
29
|
-
async Refresh(pool, autoRefreshIntervalMS) {
|
|
30
|
-
try {
|
|
31
|
-
const coreSchema = Metadata.Provider.ConfigData.MJCoreSchemaName; // global-provider-ok: data provider implementation, owns its provider context
|
|
32
|
-
const request = new sql.Request(pool);
|
|
33
|
-
const uResult = await request.query(`SELECT * FROM [${coreSchema}].vwUsers`);
|
|
34
|
-
const rRequest = new sql.Request(pool);
|
|
35
|
-
const rResult = await rRequest.query(`SELECT * FROM [${coreSchema}].vwUserRoles`);
|
|
36
|
-
const u = uResult.recordset;
|
|
37
|
-
const r = rResult.recordset;
|
|
38
|
-
if (u) {
|
|
39
|
-
this._users = u.map((user) => {
|
|
40
|
-
user.UserRoles = r.filter((role) => UUIDsEqual(role.UserID, user.ID));
|
|
41
|
-
const uI = new UserInfo(Metadata.Provider, user); // global-provider-ok: data provider implementation, owns its provider context
|
|
42
|
-
return uI;
|
|
43
|
-
});
|
|
44
|
-
// refresh this every interval noted above to ensure we have the latest data
|
|
45
|
-
if (autoRefreshIntervalMS && autoRefreshIntervalMS > 0)
|
|
46
|
-
setTimeout(() => {
|
|
47
|
-
this.Refresh(pool, autoRefreshIntervalMS);
|
|
48
|
-
}, autoRefreshIntervalMS);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
catch (err) {
|
|
52
|
-
LogError(err);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
static get Instance() {
|
|
56
|
-
return UserCache.getInstance();
|
|
57
|
-
}
|
|
58
|
-
get Users() {
|
|
59
|
-
return this._users;
|
|
60
|
-
}
|
|
61
|
-
static get Users() {
|
|
62
|
-
return UserCache.Instance.Users;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Convenience method to get a user by their name
|
|
66
|
-
* @param name - name of the user
|
|
67
|
-
* @param caseSensitive - optional, if true, the search will be case sensitive
|
|
68
|
-
* @returns
|
|
69
|
-
*/
|
|
70
|
-
UserByName(name, caseSensitive = false) {
|
|
71
|
-
return UserCache.Users.find(u => {
|
|
72
|
-
const comparisonItem = u.Name.trim();
|
|
73
|
-
const item = name.trim();
|
|
74
|
-
return caseSensitive ? comparisonItem === item : comparisonItem.toLowerCase() === item.toLowerCase();
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
//# sourceMappingURL=UserCache.js.map
|
package/dist/UserCache.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UserCache.js","sourceRoot":"","sources":["../src/UserCache.ts"],"names":[],"mappings":"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"}
|