@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 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 "./UserCache.js";
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(pool, config.CheckRefreshIntervalSeconds * 1000);
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 () => {
@@ -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,aAAa,CAAC;AAGxC;;;;;;;;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,IAAI,EAAE,MAAM,CAAC,2BAA2B,GAAG,IAAI,CAAC,CAAC;YAElF,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"}
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
@@ -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,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC"}
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,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC"}
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.1",
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.1",
22
- "@memberjunction/actions-base": "6.1.0-edge.1",
23
- "@memberjunction/ai": "6.1.0-edge.1",
24
- "@memberjunction/ai-provider-bundle": "6.1.0-edge.1",
25
- "@memberjunction/ai-vector-dupe": "6.1.0-edge.1",
26
- "@memberjunction/ai-vectordb": "6.1.0-edge.1",
27
- "@memberjunction/aiengine": "6.1.0-edge.1",
28
- "@memberjunction/core": "6.1.0-edge.1",
29
- "@memberjunction/core-entities": "6.1.0-edge.1",
30
- "@memberjunction/encryption": "6.1.0-edge.1",
31
- "@memberjunction/generic-database-provider": "6.1.0-edge.1",
32
- "@memberjunction/sql-dialect": "6.1.0-edge.1",
33
- "@memberjunction/global": "6.1.0-edge.1",
34
- "@memberjunction/query-processor": "6.1.0-edge.1",
35
- "@memberjunction/queue": "6.1.0-edge.1",
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"
@@ -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
@@ -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
@@ -1 +0,0 @@
1
- {"version":3,"file":"UserCache.js","sourceRoot":"","sources":["../src/UserCache.ts"],"names":[],"mappings":"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"}