@memberjunction/react-runtime 2.125.0 → 2.126.1
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/.turbo/turbo-build.log +6 -6
- package/CHANGELOG.md +22 -0
- package/dist/runtime.umd.js +3 -3
- package/package.json +6 -6
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
|
|
2
|
-
> @memberjunction/react-runtime@2.
|
|
2
|
+
> @memberjunction/react-runtime@2.126.1 build
|
|
3
3
|
> npm run build:node && npm run build:umd
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
> @memberjunction/react-runtime@2.
|
|
6
|
+
> @memberjunction/react-runtime@2.126.1 build:node
|
|
7
7
|
> tsc
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
> @memberjunction/react-runtime@2.
|
|
10
|
+
> @memberjunction/react-runtime@2.126.1 build:umd
|
|
11
11
|
> webpack --config webpack.umd.config.js
|
|
12
12
|
|
|
13
|
-
(node:
|
|
13
|
+
(node:13822) [DEP0180] DeprecationWarning: fs.Stats constructor is deprecated.
|
|
14
14
|
(Use `node --trace-deprecation ...` to show where the warning was created)
|
|
15
15
|
[BABEL] Note: The code generator has deoptimised the styling of /home/runner/work/MJ/MJ/packages/MJCoreEntities/dist/generated/entity_subclasses.js as it exceeds the max of 500KB.
|
|
16
16
|
asset runtime.umd.js 2.52 MiB [emitted] [minimized] [big] (name: main) 1 related asset
|
|
@@ -21,7 +21,7 @@ modules by path ../../ 5.13 MiB
|
|
|
21
21
|
modules by path ../../MJGlobal/ 200 KiB 36 modules
|
|
22
22
|
modules by path ../../MJCore/ 633 KiB 32 modules
|
|
23
23
|
modules by path ../../MJCoreEntities/dist/ 2.54 MiB 27 modules
|
|
24
|
-
modules by path ../../GraphQLDataProvider/
|
|
24
|
+
modules by path ../../GraphQLDataProvider/ 123 KiB 22 modules
|
|
25
25
|
modules by path ../../InteractiveComponents/dist/*.js 35.5 KiB 11 modules
|
|
26
26
|
modules by path ./dist/ 454 KiB 28 modules
|
|
27
|
-
webpack 5.92.1 compiled successfully in
|
|
27
|
+
webpack 5.92.1 compiled successfully in 126870 ms
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# @memberjunction/react-runtime
|
|
2
2
|
|
|
3
|
+
## 2.126.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [d6ae2a0]
|
|
8
|
+
- @memberjunction/graphql-dataprovider@2.126.1
|
|
9
|
+
- @memberjunction/interactive-component-types@2.126.1
|
|
10
|
+
- @memberjunction/core@2.126.1
|
|
11
|
+
- @memberjunction/core-entities@2.126.1
|
|
12
|
+
- @memberjunction/global@2.126.1
|
|
13
|
+
|
|
14
|
+
## 2.126.0
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- Updated dependencies [703221e]
|
|
19
|
+
- @memberjunction/core@2.126.0
|
|
20
|
+
- @memberjunction/graphql-dataprovider@2.126.0
|
|
21
|
+
- @memberjunction/interactive-component-types@2.126.0
|
|
22
|
+
- @memberjunction/core-entities@2.126.0
|
|
23
|
+
- @memberjunction/global@2.126.0
|
|
24
|
+
|
|
3
25
|
## 2.125.0
|
|
4
26
|
|
|
5
27
|
### Patch Changes
|
package/dist/runtime.umd.js
CHANGED
|
@@ -143,9 +143,9 @@
|
|
|
143
143
|
error
|
|
144
144
|
}
|
|
145
145
|
}
|
|
146
|
-
`,n={textToEmbed:Array.isArray(e.textToEmbed)?e.textToEmbed:[e.textToEmbed],modelSize:e.modelSize},r=await this._dataProvider.ExecuteGQL(t,n);if(!r?.EmbedText)throw new Error("Invalid response from server");const i=r.EmbedText;return{embeddings:Array.isArray(e.textToEmbed)?i.embeddings:i.embeddings[0],modelName:i.modelName,vectorDimensions:i.vectorDimensions,error:i.error}}catch(t){const n=t;return s.LogError(`Error generating embeddings: ${n}`),{embeddings:(Array.isArray(e.textToEmbed),[]),modelName:"Unknown",vectorDimensions:0,error:n.message||"Unknown error occurred"}}}};a(D,"GraphQLAIClient");let v=D;const b=class extends s.ProviderConfigDataBase{get Token(){return this.Data.Token}set Token(e){this.Data.Token=e}get MJAPIKey(){return this.Data.MJAPIKey}set MJAPIKey(e){this.Data.MJAPIKey=e}get URL(){return this.Data.URL}get WSURL(){return this.Data.WSURL}get RefreshTokenFunction(){return this.Data.RefreshFunction}constructor(e,t,n,r,i,a,o,s){super({Token:e,URL:t,WSURL:n,MJAPIKey:s,RefreshTokenFunction:r},i,a,o)}};a(b,"GraphQLProviderConfigData");let S=b;const I=(a(r=class extends s.ProviderBase{constructor(){super(),this._innerCurrentUserQueryString=`CurrentUser {\n ${this.userInfoString()}\n UserRoles_UserIDArray {\n ${this.userRoleInfoString()}\n }\n }\n `,this._currentUserQuery=o.gql`query CurrentUserAndRoles {
|
|
146
|
+
`,n={textToEmbed:Array.isArray(e.textToEmbed)?e.textToEmbed:[e.textToEmbed],modelSize:e.modelSize},r=await this._dataProvider.ExecuteGQL(t,n);if(!r?.EmbedText)throw new Error("Invalid response from server");const i=r.EmbedText;return{embeddings:Array.isArray(e.textToEmbed)?i.embeddings:i.embeddings[0],modelName:i.modelName,vectorDimensions:i.vectorDimensions,error:i.error}}catch(t){const n=t;return s.LogError(`Error generating embeddings: ${n}`),{embeddings:(Array.isArray(e.textToEmbed),[]),modelName:"Unknown",vectorDimensions:0,error:n.message||"Unknown error occurred"}}}};a(D,"GraphQLAIClient");let v=D;const b=class extends s.ProviderConfigDataBase{get Token(){return this.Data.Token}set Token(e){this.Data.Token=e}get MJAPIKey(){return this.Data.MJAPIKey}set MJAPIKey(e){this.Data.MJAPIKey=e}get URL(){return this.Data.URL}get WSURL(){return this.Data.WSURL}get RefreshTokenFunction(){return this.Data.RefreshFunction}constructor(e,t,n,r,i,a,o,s){super({Token:e,URL:t,WSURL:n,MJAPIKey:s,RefreshTokenFunction:r},i,a,o)}};a(b,"GraphQLProviderConfigData");let S=b;const I=(a(r=class extends s.ProviderBase{constructor(){super(),this._refreshPromise=null,this._innerCurrentUserQueryString=`CurrentUser {\n ${this.userInfoString()}\n UserRoles_UserIDArray {\n ${this.userRoleInfoString()}\n }\n }\n `,this._currentUserQuery=o.gql`query CurrentUserAndRoles {
|
|
147
147
|
${this._innerCurrentUserQueryString}
|
|
148
|
-
}`,this._wsClient=null,this._wsClientCreatedAt=null,this._pushStatusSubjects=new Map,this._activeSubscriptionCount=0,this.WS_CLIENT_MAX_AGE_MS=18e5,this.SUBSCRIPTION_CLEANUP_INTERVAL_MS=3e5,this.SUBSCRIPTION_IDLE_TIMEOUT_MS=6e5,this._subscriptionCleanupTimer=null,this._isCleaningUp=!1,r._instance||(r._instance=this)}static get Instance(){return r._instance}get ConfigData(){return this._configData}sanitizeGraphQLName(e){if(!e||0===e.length)return"";let t=e.replace(/[^A-Za-z0-9_]/g,"");return t.startsWith("__")&&(t=t.substring(2)),t=t.replace(/_/g,""),0===t.length||/^[0-9]/.test(t)?"_"+t:t}getGraphQLTypeNameBase(e){return`${e.SchemaName.trim().toLowerCase()===r.MJ_CORE_SCHEMA.trim().toLowerCase()?"MJ":this.sanitizeGraphQLName(e.SchemaName)}${this.sanitizeGraphQLName(e.BaseTable)}`}get AI(){return this._aiClient||(this._aiClient=new v(this)),this._aiClient}get DatabaseConnection(){throw new Error("DatabaseConnection not implemented for the GraphQLDataProvider")}get InstanceConnectionString(){return this._configData.URL}GenerateUUID(){return p.v4()}get LocalStoragePrefix(){if(void 0===this._configData||void 0===this._configData.URL)throw new Error("GraphQLDataProvider: ConfigData is not set. Please call Config() first.");return this._configData.URL.replace(/[^a-zA-Z0-9]/g,"_")+"."}async GetStoredSessionID(){try{const e=this.LocalStorageProvider;if(e){const t=this.LocalStoragePrefix+"sessionId";return await e.GetItem(t)}return null}catch(e){return console.error("Error retrieving session ID from local storage:",e),null}}async SaveStoredSessionID(e){try{const t=this.LocalStorageProvider;if(t){const n=this.LocalStoragePrefix+"sessionId";await t.SetItem(n,e)}}catch{}}async GetPreferredUUID(e){const t=await this.GetStoredSessionID();return e||!t?this.GenerateUUID():t}async Config(e,t,n,i){try{return n
|
|
148
|
+
}`,this._wsClient=null,this._wsClientCreatedAt=null,this._pushStatusSubjects=new Map,this._activeSubscriptionCount=0,this.WS_CLIENT_MAX_AGE_MS=18e5,this.SUBSCRIPTION_CLEANUP_INTERVAL_MS=3e5,this.SUBSCRIPTION_IDLE_TIMEOUT_MS=6e5,this._subscriptionCleanupTimer=null,this._isCleaningUp=!1,r._instance||(r._instance=this)}static get Instance(){return r._instance}get ConfigData(){return this._configData}sanitizeGraphQLName(e){if(!e||0===e.length)return"";let t=e.replace(/[^A-Za-z0-9_]/g,"");return t.startsWith("__")&&(t=t.substring(2)),t=t.replace(/_/g,""),0===t.length||/^[0-9]/.test(t)?"_"+t:t}getGraphQLTypeNameBase(e){return`${e.SchemaName.trim().toLowerCase()===r.MJ_CORE_SCHEMA.trim().toLowerCase()?"MJ":this.sanitizeGraphQLName(e.SchemaName)}${this.sanitizeGraphQLName(e.BaseTable)}`}get AI(){return this._aiClient||(this._aiClient=new v(this)),this._aiClient}get DatabaseConnection(){throw new Error("DatabaseConnection not implemented for the GraphQLDataProvider")}get InstanceConnectionString(){return this._configData.URL}GenerateUUID(){return p.v4()}get LocalStoragePrefix(){if(void 0===this._configData||void 0===this._configData.URL)throw new Error("GraphQLDataProvider: ConfigData is not set. Please call Config() first.");return this._configData.URL.replace(/[^a-zA-Z0-9]/g,"_")+"."}async GetStoredSessionID(){try{const e=this.LocalStorageProvider;if(e){const t=this.LocalStoragePrefix+"sessionId";return await e.GetItem(t)}return null}catch(e){return console.error("Error retrieving session ID from local storage:",e),null}}async SaveStoredSessionID(e){try{const t=this.LocalStorageProvider;if(t){const n=this.LocalStoragePrefix+"sessionId";await t.SetItem(n,e)}}catch{}}async GetPreferredUUID(e){const t=await this.GetStoredSessionID();return e||!t?this.GenerateUUID():t}async Config(e,t,n,i){try{const t=e.Token?`${e.Token.substring(0,20)}...${e.Token.substring(e.Token.length-10)}`:"NO TOKEN";return console.log("[GraphQL] Config called with token:",{tokenPreview:t,tokenLength:e.Token?.length,separateConnection:n,hasRefreshFunction:!!e.Data?.RefreshTokenFunction}),this._configData=e,n?(this._sessionId=await this.GetPreferredUUID(i),this._client=this.CreateNewGraphQLClient(e.URL,e.Token,this._sessionId,e.MJAPIKey),await this.SaveStoredSessionID(this._sessionId)):(r.Instance._configData=e,void 0===r.Instance._sessionId&&(r.Instance._sessionId=await this.GetPreferredUUID(i)),r.Instance._client||(r.Instance._client=this.CreateNewGraphQLClient(e.URL,e.Token,r.Instance._sessionId,e.MJAPIKey)),await r.Instance.SaveStoredSessionID(r.Instance._sessionId),this._sessionId=r.Instance._sessionId,this._client=r.Instance._client),super.Config(e)}catch(e){throw s.LogError(e),e}}get sessionId(){return this._sessionId}get AllowRefresh(){return!0}async GetCurrentUser(){const e=await this.ExecuteGQL(this._currentUserQuery,null);if(e){const t=this.ConvertBackToMJFields(e.CurrentUser),n=t.UserRoles_UserIDArray.map((e=>this.ConvertBackToMJFields(e)));return t.UserRoles_UserIDArray=n,new s.UserInfo(this,{...t,UserRoles:n})}}async RunReport(e,t){const n=o.gql`
|
|
149
149
|
query GetReportDataQuery ($ReportID: String!) {
|
|
150
150
|
GetReportData(ReportID: $ReportID) {
|
|
151
151
|
Success
|
|
@@ -321,7 +321,7 @@
|
|
|
321
321
|
ErrorMessage
|
|
322
322
|
Result
|
|
323
323
|
}
|
|
324
|
-
}`,n=await this.ExecuteGQL(t,{DataContextItemID:e});if(n&&n.GetDataContextItemData){if(n.GetDataContextItemData.Success)return JSON.parse(n.GetDataContextItemData.Result);throw new Error(n.GetDataContextItemData.ErrorMessage)}throw new Error("GraphQL query failed")}catch(e){throw s.LogError(e),e}}static async ExecuteGQL(e,t,n=!0){return r.Instance.ExecuteGQL(e,t,n)}async ExecuteGQL(e,t,n=!0){try{return await this._client.request(e,t)}catch(r){if(r&&r.response&&r.response.errors?.length>0){
|
|
324
|
+
}`,n=await this.ExecuteGQL(t,{DataContextItemID:e});if(n&&n.GetDataContextItemData){if(n.GetDataContextItemData.Success)return JSON.parse(n.GetDataContextItemData.Result);throw new Error(n.GetDataContextItemData.ErrorMessage)}throw new Error("GraphQL query failed")}catch(e){throw s.LogError(e),e}}static async ExecuteGQL(e,t,n=!0){return r.Instance.ExecuteGQL(e,t,n)}async ExecuteGQL(e,t,n=!0){try{return await this._client.request(e,t)}catch(r){if(console.log("[GraphQL] ExecuteGQL error caught:",{hasResponse:!!r?.response,hasErrors:!!r?.response?.errors,errorCount:r?.response?.errors?.length,firstError:r?.response?.errors?.[0],errorCode:r?.response?.errors?.[0]?.extensions?.code,errorMessage:r?.response?.errors?.[0]?.message,fullError:r}),r&&r.response&&r.response.errors?.length>0){const i=r.response.errors[0]?.extensions?.code?.toUpperCase().trim();if(console.log("[GraphQL] Error code detected:",i),"JWT_EXPIRED"===i){if(n)return await this.RefreshToken(),await this.ExecuteGQL(e,t,!1);throw s.LogError("JWT_EXPIRED and refreshTokenIfNeeded is false"),r}throw r}throw s.LogError(r),r}}async RefreshToken(){const e=r.Instance&&r.Instance._configData===this._configData;if(e&&r.Instance._refreshPromise)return console.log("[GraphQL] Token refresh already in progress (singleton), waiting..."),r.Instance._refreshPromise;if(this._refreshPromise)return console.log("[GraphQL] Token refresh already in progress (instance), waiting..."),this._refreshPromise;console.log("[GraphQL] Starting token refresh..."),this._refreshPromise=this.performTokenRefresh(),e&&(r.Instance._refreshPromise=this._refreshPromise);try{await this._refreshPromise,console.log("[GraphQL] Token refresh completed successfully")}finally{this._refreshPromise=null,e&&r.Instance&&(r.Instance._refreshPromise=null)}}async performTokenRefresh(){if(!this._configData.Data.RefreshTokenFunction)throw new Error("No refresh token function provided");{const e=await this._configData.Data.RefreshTokenFunction();if(!e)throw new Error("Refresh token function returned null or undefined token");{this._configData.Token=e;const t=this.CreateNewGraphQLClient(this._configData.URL,this._configData.Token,this._sessionId,this._configData.MJAPIKey);this._client=t,r.Instance&&r.Instance._configData===this._configData&&(r.Instance._client=t)}}}static async RefreshToken(){return r.Instance.RefreshToken()}CreateNewGraphQLClient(e,t,n,r){const i=t?`${t.substring(0,20)}...${t.substring(t.length-10)}`:"NO TOKEN";console.log("[GraphQL] Creating new client:",{url:e,tokenPreview:i,tokenLength:t?.length,sessionId:n,hasMJAPIKey:!!r});const a={"x-session-id":n};return t&&(a.authorization="Bearer "+t),r&&(a["x-mj-api-key"]=r),new o.GraphQLClient(e,{headers:a})}userInfoString(){return this.infoString(new s.UserInfo(null,null))}userRoleInfoString(){return this.infoString(new s.UserRoleInfo(null))}infoString(e){let t="";const n=Object.keys(e);for(const e of n)e.startsWith("__mj_")?t+=e.replace("__mj_","_mj__")+"\n ":e.startsWith("_")||(t+=e+"\n ");return t}get LocalStorageProvider(){return this._localStorageProvider||(this._localStorageProvider=new w),this._localStorageProvider}get Metadata(){return this}getOrCreateWSClient(){const e=Date.now();return this._wsClient&&this._wsClientCreatedAt&&e-this._wsClientCreatedAt>this.WS_CLIENT_MAX_AGE_MS&&0===this._activeSubscriptionCount&&this.disposeWSClient(),this._wsClient||(this._wsClient=d.createClient({url:this.ConfigData.WSURL,connectionParams:{Authorization:"Bearer "+this.ConfigData.Token},keepAlive:3e4,retryAttempts:3,shouldRetry:()=>!0}),this._wsClientCreatedAt=e,this._subscriptionCleanupTimer||(this._subscriptionCleanupTimer=setInterval((()=>{this.cleanupStaleSubscriptions()}),this.SUBSCRIPTION_CLEANUP_INTERVAL_MS))),this._wsClient}disposeWSClient(){if(this._wsClient){try{this._wsClient.dispose()}catch(e){console.error("[GraphQLDataProvider] Error disposing WebSocket client:",e)}this._wsClient=null,this._wsClientCreatedAt=null}}completeAllSubjects(){this._pushStatusSubjects.forEach(((e,t)=>{try{e.subject.complete(),e.subscription.unsubscribe()}catch(e){console.error(`[GraphQLDataProvider] Error cleaning up subject for ${t}:`,e)}})),this._pushStatusSubjects.clear()}cleanupStaleSubscriptions(){if(!this._isCleaningUp){this._isCleaningUp=!0;try{const e=Date.now(),t=(this._pushStatusSubjects.size,Array.from(this._pushStatusSubjects.entries())),n=[];t.forEach((([t,r])=>{const i=e-r.lastRequestedAt,a=e-r.lastEmissionAt;0===r.activeSubscribers&&i>=this.SUBSCRIPTION_IDLE_TIMEOUT_MS&&a>=this.SUBSCRIPTION_IDLE_TIMEOUT_MS&&(console.log(`[GraphQLDataProvider] Marking session ${t} for cleanup: activeSubscribers=${r.activeSubscribers}, timeSinceRequested=${Math.round(i/1e3)}s, timeSinceEmission=${Math.round(a/1e3)}s`),n.push(t))})),n.forEach((e=>{const t=this._pushStatusSubjects.get(e);if(t)try{t.subject.complete(),t.subscription.unsubscribe(),this._pushStatusSubjects.delete(e),console.log(`[GraphQLDataProvider] Cleaned up stale subscription for session: ${e}`)}catch(t){console.error(`[GraphQLDataProvider] Error cleaning up subscription for ${e}:`,t)}})),n.length>0&&console.log(`[GraphQLDataProvider] Cleaned up ${n.length} stale subscription(s)`),0===this._pushStatusSubjects.size&&this._wsClient&&this._wsClientCreatedAt&&e-this._wsClientCreatedAt>this.WS_CLIENT_MAX_AGE_MS&&(console.log("[GraphQLDataProvider] Disposing of idle WebSocket client"),this.disposeWSClient())}finally{this._isCleaningUp=!1}}}subscribe(e,t){return new l.Observable((n=>{const r=this.getOrCreateWSClient();this._activeSubscriptionCount++;const i=r.subscribe({query:e,variables:t},{next:e=>{n.next(e.data)},error:async e=>{const t=e;if("JWT_EXPIRED"===t?.extensions?.code||t?.message?.includes("token has expired")||t?.message?.includes("JWT_EXPIRED")){console.log("[GraphQLDataProvider] WebSocket JWT token expired, refreshing and reconnecting...");try{await this.RefreshToken(),this.disposeWSClient(),n.complete()}catch(e){console.error("[GraphQLDataProvider] Failed to refresh token for WebSocket:",e),n.error(e)}}else n.error(e)},complete:()=>{n.complete()}});return()=>{this._activeSubscriptionCount--,i()}}))}PushStatusUpdates(e=null){e||(e=this.sessionId);const t=Date.now(),n=this._pushStatusSubjects.get(e);if(n)return n.lastRequestedAt=t,new l.Observable((t=>{n.activeSubscribers++;const r=n.subject.subscribe(t);return()=>{const t=this._pushStatusSubjects.get(e);t&&t.activeSubscribers>0&&t.activeSubscribers--,r.unsubscribe()}}));const r=o.gql`subscription StatusUpdates($sessionId: String!) {
|
|
325
325
|
statusUpdates(sessionId: $sessionId) {
|
|
326
326
|
date
|
|
327
327
|
message
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/react-runtime",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.126.1",
|
|
4
4
|
"description": "Platform-agnostic React component runtime for MemberJunction. Provides core compilation, registry, and execution capabilities for React components in any JavaScript environment.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -27,11 +27,11 @@
|
|
|
27
27
|
},
|
|
28
28
|
"homepage": "https://github.com/MemberJunction/MJ#readme",
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@memberjunction/core": "2.
|
|
31
|
-
"@memberjunction/global": "2.
|
|
32
|
-
"@memberjunction/interactive-component-types": "2.
|
|
33
|
-
"@memberjunction/core-entities": "2.
|
|
34
|
-
"@memberjunction/graphql-dataprovider": "2.
|
|
30
|
+
"@memberjunction/core": "2.126.1",
|
|
31
|
+
"@memberjunction/global": "2.126.1",
|
|
32
|
+
"@memberjunction/interactive-component-types": "2.126.1",
|
|
33
|
+
"@memberjunction/core-entities": "2.126.1",
|
|
34
|
+
"@memberjunction/graphql-dataprovider": "2.126.1",
|
|
35
35
|
"@babel/standalone": "^7.23.5",
|
|
36
36
|
"rxjs": "^7.8.1"
|
|
37
37
|
},
|