@memberjunction/server 6.1.0-edge.2 → 6.1.0-edge.4
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/LICENSE +180 -4
- package/dist/agentSessions/SessionManager.d.ts +19 -5
- package/dist/agentSessions/SessionManager.d.ts.map +1 -1
- package/dist/agentSessions/SessionManager.js +27 -9
- package/dist/agentSessions/SessionManager.js.map +1 -1
- package/dist/auth/AuthProviderCatalogRouter.d.ts +31 -0
- package/dist/auth/AuthProviderCatalogRouter.d.ts.map +1 -0
- package/dist/auth/AuthProviderCatalogRouter.js +69 -0
- package/dist/auth/AuthProviderCatalogRouter.js.map +1 -0
- package/dist/auth/AuthProviderEngine.d.ts +96 -0
- package/dist/auth/AuthProviderEngine.d.ts.map +1 -0
- package/dist/auth/AuthProviderEngine.js +245 -0
- package/dist/auth/AuthProviderEngine.js.map +1 -0
- package/dist/auth/index.d.ts +12 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +57 -13
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/initializeProviders.d.ts +64 -1
- package/dist/auth/initializeProviders.d.ts.map +1 -1
- package/dist/auth/initializeProviders.js +117 -5
- package/dist/auth/initializeProviders.js.map +1 -1
- package/dist/auth/scopeLimitedPrincipal.d.ts +39 -0
- package/dist/auth/scopeLimitedPrincipal.d.ts.map +1 -0
- package/dist/auth/scopeLimitedPrincipal.js +49 -0
- package/dist/auth/scopeLimitedPrincipal.js.map +1 -0
- package/dist/config.d.ts +89 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +52 -35
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +21 -1
- package/dist/context.js.map +1 -1
- package/dist/entitySubclasses/MJEntityPermissionEntityServer.server.d.ts.map +1 -1
- package/dist/entitySubclasses/MJEntityPermissionEntityServer.server.js +8 -7
- package/dist/entitySubclasses/MJEntityPermissionEntityServer.server.js.map +1 -1
- package/dist/generated/generated.d.ts +619 -1597
- package/dist/generated/generated.d.ts.map +1 -1
- package/dist/generated/generated.js +3341 -17021
- package/dist/generated/generated.js.map +1 -1
- package/dist/generic/ResolverBase.d.ts +28 -1
- package/dist/generic/ResolverBase.d.ts.map +1 -1
- package/dist/generic/ResolverBase.js +57 -8
- package/dist/generic/ResolverBase.js.map +1 -1
- package/dist/generic/RunViewResolver.d.ts +4 -0
- package/dist/generic/RunViewResolver.d.ts.map +1 -1
- package/dist/generic/RunViewResolver.js +31 -0
- package/dist/generic/RunViewResolver.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +147 -14
- package/dist/index.js.map +1 -1
- package/dist/integration/CustomColumnPromoter.d.ts +79 -15
- package/dist/integration/CustomColumnPromoter.d.ts.map +1 -1
- package/dist/integration/CustomColumnPromoter.js +472 -97
- package/dist/integration/CustomColumnPromoter.js.map +1 -1
- package/dist/integration/InactiveRowWarnings.d.ts +48 -0
- package/dist/integration/InactiveRowWarnings.d.ts.map +1 -0
- package/dist/integration/InactiveRowWarnings.js +57 -0
- package/dist/integration/InactiveRowWarnings.js.map +1 -0
- package/dist/integration/RSUProgressBridge.d.ts +83 -0
- package/dist/integration/RSUProgressBridge.d.ts.map +1 -0
- package/dist/integration/RSUProgressBridge.js +230 -0
- package/dist/integration/RSUProgressBridge.js.map +1 -0
- package/dist/integration/SchemaRefreshLaunch.d.ts +62 -0
- package/dist/integration/SchemaRefreshLaunch.d.ts.map +1 -0
- package/dist/integration/SchemaRefreshLaunch.js +67 -0
- package/dist/integration/SchemaRefreshLaunch.js.map +1 -0
- package/dist/providerConfigUnits.d.ts +20 -0
- package/dist/providerConfigUnits.d.ts.map +1 -0
- package/dist/providerConfigUnits.js +22 -0
- package/dist/providerConfigUnits.js.map +1 -0
- package/dist/resolvers/AdhocQueryResolver.d.ts +4 -0
- package/dist/resolvers/AdhocQueryResolver.d.ts.map +1 -1
- package/dist/resolvers/AdhocQueryResolver.js +20 -6
- package/dist/resolvers/AdhocQueryResolver.js.map +1 -1
- package/dist/resolvers/FileResolver.d.ts +34 -4
- package/dist/resolvers/FileResolver.d.ts.map +1 -1
- package/dist/resolvers/FileResolver.js +218 -28
- package/dist/resolvers/FileResolver.js.map +1 -1
- package/dist/resolvers/IdentityClaimRedemptionResolver.d.ts +37 -0
- package/dist/resolvers/IdentityClaimRedemptionResolver.d.ts.map +1 -0
- package/dist/resolvers/IdentityClaimRedemptionResolver.js +220 -0
- package/dist/resolvers/IdentityClaimRedemptionResolver.js.map +1 -0
- package/dist/resolvers/IntegrationDiscoveryResolver.d.ts +108 -3
- package/dist/resolvers/IntegrationDiscoveryResolver.d.ts.map +1 -1
- package/dist/resolvers/IntegrationDiscoveryResolver.js +374 -87
- package/dist/resolvers/IntegrationDiscoveryResolver.js.map +1 -1
- package/dist/resolvers/QueryResolver.d.ts +5 -4
- package/dist/resolvers/QueryResolver.d.ts.map +1 -1
- package/dist/resolvers/QueryResolver.js +29 -14
- package/dist/resolvers/QueryResolver.js.map +1 -1
- package/dist/resolvers/QuerySystemUserResolver.d.ts +12 -3
- package/dist/resolvers/QuerySystemUserResolver.d.ts.map +1 -1
- package/dist/resolvers/QuerySystemUserResolver.js +33 -14
- package/dist/resolvers/QuerySystemUserResolver.js.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.d.ts +3 -1
- package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.js +20 -7
- package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
- package/dist/resolvers/TaskGraphFrameResolver.d.ts +18 -0
- package/dist/resolvers/TaskGraphFrameResolver.d.ts.map +1 -1
- package/dist/resolvers/TaskGraphFrameResolver.js +75 -0
- package/dist/resolvers/TaskGraphFrameResolver.js.map +1 -1
- package/dist/resolvers/UserResolver.d.ts +19 -17
- package/dist/resolvers/UserResolver.d.ts.map +1 -1
- package/dist/resolvers/UserResolver.js +66 -67
- package/dist/resolvers/UserResolver.js.map +1 -1
- package/dist/resolvers/currentUserRoles.d.ts +19 -0
- package/dist/resolvers/currentUserRoles.d.ts.map +1 -0
- package/dist/resolvers/currentUserRoles.js +36 -0
- package/dist/resolvers/currentUserRoles.js.map +1 -0
- package/dist/resolvers/meetingRecordingRegistration.d.ts.map +1 -1
- package/dist/resolvers/meetingRecordingRegistration.js +3 -6
- package/dist/resolvers/meetingRecordingRegistration.js.map +1 -1
- package/dist/rest/MediaAccessKeys.d.ts +17 -0
- package/dist/rest/MediaAccessKeys.d.ts.map +1 -1
- package/dist/rest/MediaAccessKeys.js +42 -1
- package/dist/rest/MediaAccessKeys.js.map +1 -1
- package/dist/rest/MediaStreamHandler.d.ts +3 -2
- package/dist/rest/MediaStreamHandler.d.ts.map +1 -1
- package/dist/rest/MediaStreamHandler.js +83 -2
- package/dist/rest/MediaStreamHandler.js.map +1 -1
- package/dist/rest/OAuthCallbackHandler.d.ts +49 -1
- package/dist/rest/OAuthCallbackHandler.d.ts.map +1 -1
- package/dist/rest/OAuthCallbackHandler.js +129 -43
- package/dist/rest/OAuthCallbackHandler.js.map +1 -1
- package/dist/rest/UploadTokenManager.d.ts +90 -0
- package/dist/rest/UploadTokenManager.d.ts.map +1 -0
- package/dist/rest/UploadTokenManager.js +156 -0
- package/dist/rest/UploadTokenManager.js.map +1 -0
- package/dist/services/IntegrationSyncWorkerService.d.ts +48 -0
- package/dist/services/IntegrationSyncWorkerService.d.ts.map +1 -0
- package/dist/services/IntegrationSyncWorkerService.js +132 -0
- package/dist/services/IntegrationSyncWorkerService.js.map +1 -0
- package/dist/services/StartTaskGraphDispatcher.d.ts +0 -10
- package/dist/services/StartTaskGraphDispatcher.d.ts.map +1 -1
- package/dist/services/StartTaskGraphDispatcher.js +21 -1
- package/dist/services/StartTaskGraphDispatcher.js.map +1 -1
- package/dist/services/TaskGraphAgentRunner.d.ts +7 -0
- package/dist/services/TaskGraphAgentRunner.d.ts.map +1 -1
- package/dist/services/TaskGraphAgentRunner.js +23 -0
- package/dist/services/TaskGraphAgentRunner.js.map +1 -1
- package/dist/services/TaskGraphContinuationDeliverer.d.ts.map +1 -1
- package/dist/services/TaskGraphContinuationDeliverer.js +12 -1
- package/dist/services/TaskGraphContinuationDeliverer.js.map +1 -1
- package/dist/types.d.ts +14 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +92 -92
- package/src/__tests__/APIKeyScopeAuth.test.ts +475 -0
- package/src/__tests__/AdhocQueryResolver.scopeGuard.test.ts +84 -0
- package/src/__tests__/AuthProviderEngine.test.ts +278 -0
- package/src/__tests__/CustomColumnPromoterOnePass.test.ts +387 -0
- package/src/__tests__/EntityCRUDHandler.test.ts +378 -0
- package/src/__tests__/InactiveRowWarnings.test.ts +87 -0
- package/src/__tests__/IntegrationSyncWorkerService.test.ts +275 -0
- package/src/__tests__/OAuthCallbackHandler.openRedirect.test.ts +117 -0
- package/src/__tests__/OAuthCallbackHandler.xss.test.ts +4 -1
- package/src/__tests__/RESTEndpointHandler.test.ts +672 -0
- package/src/__tests__/RSUProgressBridge.test.ts +250 -0
- package/src/__tests__/ReactivateRefreshMessage.test.ts +85 -0
- package/src/__tests__/RealtimeBridgeResolver.test.ts +10 -2
- package/src/__tests__/ResolverBase.filterEscaping.test.ts +147 -0
- package/src/__tests__/SchemaRefreshLaunch.test.ts +114 -0
- package/src/__tests__/SessionManager.test.ts +55 -0
- package/src/__tests__/UserResolver.currentUser.test.ts +87 -0
- package/src/__tests__/ViewOperationsHandler.test.ts +277 -0
- package/src/__tests__/config-units.test.ts +74 -0
- package/src/__tests__/initializeProviders.refresh.test.ts +146 -0
- package/src/__tests__/mjapi-bootstrap.test.ts +0 -6
- package/src/__tests__/newUsers.test.ts +726 -0
- package/src/__tests__/uploadTokenManager.test.ts +159 -0
- package/src/agentSessions/SessionManager.ts +27 -9
- package/src/auth/AuthProviderCatalogRouter.ts +76 -0
- package/src/auth/AuthProviderEngine.ts +253 -0
- package/src/auth/index.ts +60 -15
- package/src/auth/initializeProviders.ts +128 -7
- package/src/auth/scopeLimitedPrincipal.ts +50 -0
- package/src/config.ts +55 -36
- package/src/context.ts +26 -2
- package/src/entitySubclasses/MJEntityPermissionEntityServer.server.ts +8 -7
- package/src/generated/generated.ts +2347 -10551
- package/src/generic/ResolverBase.ts +67 -8
- package/src/generic/RunViewResolver.ts +31 -0
- package/src/index.ts +165 -16
- package/src/integration/CustomColumnPromoter.ts +520 -98
- package/src/integration/InactiveRowWarnings.ts +85 -0
- package/src/integration/RSUProgressBridge.ts +248 -0
- package/src/integration/SchemaRefreshLaunch.ts +93 -0
- package/src/providerConfigUnits.ts +21 -0
- package/src/resolvers/AdhocQueryResolver.ts +21 -6
- package/src/resolvers/FileResolver.ts +200 -40
- package/src/resolvers/IdentityClaimRedemptionResolver.ts +184 -0
- package/src/resolvers/IntegrationDiscoveryResolver.ts +390 -71
- package/src/resolvers/QueryResolver.ts +25 -11
- package/src/resolvers/QuerySystemUserResolver.ts +28 -13
- package/src/resolvers/RunAIAgentResolver.ts +21 -6
- package/src/resolvers/TaskGraphFrameResolver.ts +67 -0
- package/src/resolvers/UserResolver.ts +99 -60
- package/src/resolvers/currentUserRoles.ts +47 -0
- package/src/resolvers/meetingRecordingRegistration.ts +3 -7
- package/src/rest/MediaAccessKeys.ts +47 -1
- package/src/rest/MediaStreamHandler.ts +98 -3
- package/src/rest/OAuthCallbackHandler.ts +149 -41
- package/src/rest/UploadTokenManager.ts +211 -0
- package/src/services/IntegrationSyncWorkerService.ts +141 -0
- package/src/services/StartTaskGraphDispatcher.ts +21 -1
- package/src/services/TaskGraphAgentRunner.ts +23 -0
- package/src/services/TaskGraphContinuationDeliverer.ts +11 -1
- package/src/types.ts +14 -0
|
@@ -10,51 +10,32 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
11
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
12
|
};
|
|
13
|
-
import { Arg, Ctx,
|
|
13
|
+
import { Arg, Ctx, Field, Int, ObjectType, Query, Resolver } from '@memberjunction/server';
|
|
14
|
+
import { RunView } from '@memberjunction/core';
|
|
14
15
|
import { UUIDsEqual } from '@memberjunction/global';
|
|
15
16
|
import { MJUser_, MJUserRole_, MJUserResolverBase } from '../generated/generated.js';
|
|
16
17
|
import { GetReadOnlyProvider } from '../util.js';
|
|
18
|
+
import { AssertRoleLoadSucceeded, RequireContextUser, RequireLoadedUser, RequireRoleProvider, UserIdExtraFilter, } from './currentUserRoles.js';
|
|
19
|
+
/**
|
|
20
|
+
* CurrentUser payload. Extends the generated user type with a first-class `Roles`
|
|
21
|
+
* field — child-array FieldResolvers (`MJUserRoles_UserIDArray`) are no longer
|
|
22
|
+
* generated. Roles come from the request's `UserInfo` (so magic-link anonymous
|
|
23
|
+
* sessions keep their synthesized roles) or from a RunView on `MJ: User Roles`.
|
|
24
|
+
*/
|
|
25
|
+
let CurrentUserType = class CurrentUserType extends MJUser_ {
|
|
26
|
+
};
|
|
27
|
+
__decorate([
|
|
28
|
+
Field(() => [MJUserRole_]),
|
|
29
|
+
__metadata("design:type", Array)
|
|
30
|
+
], CurrentUserType.prototype, "Roles", void 0);
|
|
31
|
+
CurrentUserType = __decorate([
|
|
32
|
+
ObjectType()
|
|
33
|
+
], CurrentUserType);
|
|
34
|
+
export { CurrentUserType };
|
|
17
35
|
let UserResolver = class UserResolver extends MJUserResolverBase {
|
|
18
|
-
/**
|
|
19
|
-
* Roles for the current user row.
|
|
20
|
-
*
|
|
21
|
-
* Overrides the generated field resolver to support ANONYMOUS magic-link sessions: those
|
|
22
|
-
* resolve to a shared Anonymous principal that holds NO roles in the database (by design —
|
|
23
|
-
* persisting them would let anonymous sessions accrete privileges across links). The roles
|
|
24
|
-
* are synthesized per-request in {@link buildMagicLinkSessionUser} and live only on the
|
|
25
|
-
* request's `UserInfo`. For the session's OWN user row we serve those synthesized roles
|
|
26
|
-
* directly, skipping the generated DB query (which returns empty) and its `MJ: User Roles`
|
|
27
|
-
* read-permission check (which the restricted anon role wouldn't pass). Every other case —
|
|
28
|
-
* named users, named magic-link users, listing other users' roles — falls through to the
|
|
29
|
-
* generated resolver unchanged, so there is no behavioral or security change off this path.
|
|
30
|
-
*/
|
|
31
|
-
async MJUserRoles_UserIDArray(mjuser_, context, pubSub) {
|
|
32
|
-
const sessionUser = context.userPayload?.userRecord;
|
|
33
|
-
if (sessionUser?.IsMagicLinkAnonymous && UUIDsEqual(mjuser_.ID, sessionUser.ID)) {
|
|
34
|
-
const now = new Date();
|
|
35
|
-
// Build rows with the entity's RAW field names, then run them through the same
|
|
36
|
-
// name→code-name mapping the generated resolver uses (e.g. __mj_CreatedAt →
|
|
37
|
-
// _mj__CreatedAt). Returning raw names directly trips GraphQL's non-nullable check.
|
|
38
|
-
const rows = (sessionUser.UserRoles ?? []).map((r) => ({
|
|
39
|
-
ID: sessionUser.ID,
|
|
40
|
-
UserID: r.UserID,
|
|
41
|
-
RoleID: r.RoleID,
|
|
42
|
-
User: sessionUser.Name,
|
|
43
|
-
Role: r.RoleName ?? r.Role,
|
|
44
|
-
__mj_CreatedAt: now,
|
|
45
|
-
__mj_UpdatedAt: now,
|
|
46
|
-
}));
|
|
47
|
-
return this.ArrayMapFieldNamesToCodeNames('MJ: User Roles', rows, sessionUser);
|
|
48
|
-
}
|
|
49
|
-
return super.MJUserRoles_UserIDArray(mjuser_, context, pubSub);
|
|
50
|
-
}
|
|
51
36
|
async CurrentUser(context) {
|
|
52
|
-
// Check API key scope authorization for user read (self)
|
|
53
37
|
await this.CheckAPIKeyScopeAuthorization('user:read', '*', context.userPayload);
|
|
54
|
-
// If userRecord is already available (e.g., from API key auth or system auth),
|
|
55
|
-
// use it directly instead of looking up by email again
|
|
56
38
|
if (context.userPayload.userRecord) {
|
|
57
|
-
// Convert UserInfo to the GraphQL response format
|
|
58
39
|
const userRecord = context.userPayload.userRecord;
|
|
59
40
|
const userData = {
|
|
60
41
|
ID: userRecord.ID,
|
|
@@ -71,60 +52,78 @@ let UserResolver = class UserResolver extends MJUserResolverBase {
|
|
|
71
52
|
LinkedEntityRecordID: userRecord.LinkedEntityRecordID,
|
|
72
53
|
__mj_CreatedAt: userRecord.__mj_CreatedAt,
|
|
73
54
|
__mj_UpdatedAt: userRecord.__mj_UpdatedAt,
|
|
74
|
-
// Include the UserRoles sub-array for the GraphQL response
|
|
75
|
-
MJUserRoles_UserIDArray: userRecord.UserRoles?.map((r) => ({
|
|
76
|
-
ID: r.ID,
|
|
77
|
-
UserID: r.UserID,
|
|
78
|
-
RoleID: r.RoleID,
|
|
79
|
-
User: userRecord.Name,
|
|
80
|
-
Role: r.RoleName,
|
|
81
|
-
__mj_CreatedAt: r.__mj_CreatedAt,
|
|
82
|
-
__mj_UpdatedAt: r.__mj_UpdatedAt,
|
|
83
|
-
})) || [],
|
|
84
55
|
};
|
|
85
56
|
console.log('CurrentUser (from userRecord)', userData.Email);
|
|
86
|
-
|
|
57
|
+
const provider = GetReadOnlyProvider(context.providers, { allowFallbackToReadWrite: true });
|
|
58
|
+
const mapped = await this.MapFieldNamesToCodeNames('MJ: Users', userData, userRecord, provider);
|
|
59
|
+
return {
|
|
60
|
+
...mapped,
|
|
61
|
+
Roles: await this.mapRolesFromUserInfo(userRecord.UserRoles ?? [], userRecord, userRecord, provider),
|
|
62
|
+
};
|
|
87
63
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
64
|
+
const result = RequireLoadedUser(await this.UserByEmail(context.userPayload.email, context), context.userPayload.email);
|
|
65
|
+
console.log('CurrentUser (from email lookup)', result.Email);
|
|
66
|
+
return {
|
|
67
|
+
...result,
|
|
68
|
+
Roles: await this.loadRolesForUser(result, context),
|
|
69
|
+
};
|
|
92
70
|
}
|
|
93
71
|
async UserByID(ID, { providers, userPayload }) {
|
|
94
|
-
// Check API key scope authorization for user read
|
|
95
72
|
await this.CheckAPIKeyScopeAuthorization('user:read', ID.toString(), userPayload);
|
|
96
73
|
const provider = GetReadOnlyProvider(providers, { allowFallbackToReadWrite: true });
|
|
97
74
|
const retVal = super.safeFirstArrayElement(await this.findBy(provider, 'MJ: Users', { ID }, userPayload.userRecord));
|
|
98
75
|
return this.MapFieldNamesToCodeNames('MJ: Users', retVal);
|
|
99
76
|
}
|
|
100
77
|
async UserByEmployeeID(EmployeeID, { providers, userPayload }) {
|
|
101
|
-
// Check API key scope authorization for user read
|
|
102
78
|
await this.CheckAPIKeyScopeAuthorization('user:read', EmployeeID.toString(), userPayload);
|
|
103
79
|
const provider = GetReadOnlyProvider(providers, { allowFallbackToReadWrite: true });
|
|
104
80
|
const retVal = super.safeFirstArrayElement(await this.findBy(provider, 'MJ: Users', { EmployeeID }, userPayload.userRecord));
|
|
105
81
|
return this.MapFieldNamesToCodeNames('MJ: Users', retVal);
|
|
106
82
|
}
|
|
107
83
|
async UserByEmail(Email, { providers, userPayload }) {
|
|
108
|
-
// Check API key scope authorization for user read
|
|
109
84
|
await this.CheckAPIKeyScopeAuthorization('user:read', Email, userPayload);
|
|
110
|
-
// const searchEmail = userEmailMap[Email] ?? Email;
|
|
111
85
|
const searchEmail = Email;
|
|
112
86
|
const provider = GetReadOnlyProvider(providers, { allowFallbackToReadWrite: true });
|
|
113
87
|
const returnVal = super.safeFirstArrayElement(await this.findBy(provider, 'MJ: Users', { Email: searchEmail }, userPayload.userRecord));
|
|
114
88
|
return this.MapFieldNamesToCodeNames('MJ: Users', returnVal);
|
|
115
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Magic-link anonymous sessions hold synthesized roles on UserInfo that are
|
|
92
|
+
* not persisted. Always prefer those when the requested row is the session
|
|
93
|
+
* user. Everyone else loads `MJ: User Roles` via RunView.
|
|
94
|
+
*/
|
|
95
|
+
async loadRolesForUser(user, context) {
|
|
96
|
+
const contextUser = RequireContextUser(this.GetUserFromPayload(context.userPayload));
|
|
97
|
+
if (contextUser.IsMagicLinkAnonymous && UUIDsEqual(user.ID, contextUser.ID)) {
|
|
98
|
+
const provider = GetReadOnlyProvider(context.providers, { allowFallbackToReadWrite: true });
|
|
99
|
+
return await this.mapRolesFromUserInfo(contextUser.UserRoles ?? [], contextUser, contextUser, provider);
|
|
100
|
+
}
|
|
101
|
+
const provider = RequireRoleProvider(GetReadOnlyProvider(context.providers, { allowFallbackToReadWrite: true }));
|
|
102
|
+
const rv = RunView.FromMetadataProvider(provider);
|
|
103
|
+
const result = await rv.RunView({
|
|
104
|
+
EntityName: 'MJ: User Roles',
|
|
105
|
+
ExtraFilter: UserIdExtraFilter(user.ID),
|
|
106
|
+
ResultType: 'simple',
|
|
107
|
+
}, contextUser);
|
|
108
|
+
AssertRoleLoadSucceeded(result, user.ID);
|
|
109
|
+
return await this.ArrayMapFieldNamesToCodeNames('MJ: User Roles', result.Results ?? [], contextUser, provider);
|
|
110
|
+
}
|
|
111
|
+
async mapRolesFromUserInfo(roles, user, contextUser, provider) {
|
|
112
|
+
const now = new Date();
|
|
113
|
+
const rows = roles.map((r) => ({
|
|
114
|
+
ID: r.ID ?? user.ID,
|
|
115
|
+
UserID: r.UserID,
|
|
116
|
+
RoleID: r.RoleID,
|
|
117
|
+
User: user.Name,
|
|
118
|
+
Role: r.RoleName ?? r.Role,
|
|
119
|
+
__mj_CreatedAt: r.__mj_CreatedAt ?? now,
|
|
120
|
+
__mj_UpdatedAt: r.__mj_UpdatedAt ?? now,
|
|
121
|
+
}));
|
|
122
|
+
return await this.ArrayMapFieldNamesToCodeNames('MJ: User Roles', rows, contextUser, provider);
|
|
123
|
+
}
|
|
116
124
|
};
|
|
117
125
|
__decorate([
|
|
118
|
-
|
|
119
|
-
__param(0, Root()),
|
|
120
|
-
__param(1, Ctx()),
|
|
121
|
-
__param(2, PubSub()),
|
|
122
|
-
__metadata("design:type", Function),
|
|
123
|
-
__metadata("design:paramtypes", [MJUser_, Object, PubSubEngine]),
|
|
124
|
-
__metadata("design:returntype", Promise)
|
|
125
|
-
], UserResolver.prototype, "MJUserRoles_UserIDArray", null);
|
|
126
|
-
__decorate([
|
|
127
|
-
Query(() => MJUser_),
|
|
126
|
+
Query(() => CurrentUserType),
|
|
128
127
|
__param(0, Ctx()),
|
|
129
128
|
__metadata("design:type", Function),
|
|
130
129
|
__metadata("design:paramtypes", [Object]),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserResolver.js","sourceRoot":"","sources":["../../src/resolvers/UserResolver.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAc,GAAG,EAAE,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"UserResolver.js","sourceRoot":"","sources":["../../src/resolvers/UserResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guards and filter builders for CurrentUser role loading.
|
|
3
|
+
* Kept out of UserResolver so the login-adjacent failure modes are unit-testable
|
|
4
|
+
* without importing generated GraphQL types or the Apollo config bootstrap.
|
|
5
|
+
*/
|
|
6
|
+
export declare function RequireLoadedUser<T extends {
|
|
7
|
+
ID?: string;
|
|
8
|
+
}>(user: T | null | undefined, email: string | undefined): T & {
|
|
9
|
+
ID: string;
|
|
10
|
+
};
|
|
11
|
+
export declare function RequireContextUser<T>(user: T | null | undefined): T;
|
|
12
|
+
export declare function RequireRoleProvider<T>(provider: T | null | undefined): T;
|
|
13
|
+
/** Quote-escape a server-resolved user id for an ExtraFilter literal. */
|
|
14
|
+
export declare function UserIdExtraFilter(userId: string): string;
|
|
15
|
+
export declare function AssertRoleLoadSucceeded(result: {
|
|
16
|
+
Success: boolean;
|
|
17
|
+
ErrorMessage?: string | null;
|
|
18
|
+
}, userId: string): void;
|
|
19
|
+
//# sourceMappingURL=currentUserRoles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"currentUserRoles.d.ts","sourceRoot":"","sources":["../../src/resolvers/currentUserRoles.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,EACzD,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,CAAC,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAKpB;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,CAAC,CAKnE;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,CAAC,CAKxE;AAED,yEAAyE;AACzE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAC1D,MAAM,EAAE,MAAM,GACb,IAAI,CAMN"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { LogError } from '@memberjunction/core';
|
|
2
|
+
/**
|
|
3
|
+
* Guards and filter builders for CurrentUser role loading.
|
|
4
|
+
* Kept out of UserResolver so the login-adjacent failure modes are unit-testable
|
|
5
|
+
* without importing generated GraphQL types or the Apollo config bootstrap.
|
|
6
|
+
*/
|
|
7
|
+
export function RequireLoadedUser(user, email) {
|
|
8
|
+
if (!user?.ID) {
|
|
9
|
+
throw new Error(`CurrentUser: no user found for email '${email ?? ''}'`);
|
|
10
|
+
}
|
|
11
|
+
return user;
|
|
12
|
+
}
|
|
13
|
+
export function RequireContextUser(user) {
|
|
14
|
+
if (!user) {
|
|
15
|
+
throw new Error('CurrentUser: authenticated context user is required to load roles');
|
|
16
|
+
}
|
|
17
|
+
return user;
|
|
18
|
+
}
|
|
19
|
+
export function RequireRoleProvider(provider) {
|
|
20
|
+
if (!provider) {
|
|
21
|
+
throw new Error('CurrentUser: no data provider available to load roles');
|
|
22
|
+
}
|
|
23
|
+
return provider;
|
|
24
|
+
}
|
|
25
|
+
/** Quote-escape a server-resolved user id for an ExtraFilter literal. */
|
|
26
|
+
export function UserIdExtraFilter(userId) {
|
|
27
|
+
return `UserID='${userId.replace(/'/g, "''")}'`;
|
|
28
|
+
}
|
|
29
|
+
export function AssertRoleLoadSucceeded(result, userId) {
|
|
30
|
+
if (!result.Success) {
|
|
31
|
+
const message = result.ErrorMessage ?? 'unknown error';
|
|
32
|
+
LogError(`CurrentUser: failed to load roles for user ${userId}: ${message}`);
|
|
33
|
+
throw new Error(`CurrentUser: failed to load roles: ${message}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=currentUserRoles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"currentUserRoles.js","sourceRoot":"","sources":["../../src/resolvers/currentUserRoles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD;;;;GAIG;AAEH,MAAM,UAAU,iBAAiB,CAC/B,IAA0B,EAC1B,KAAyB;IAEzB,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,yCAAyC,KAAK,IAAI,EAAE,GAAG,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,IAA0B,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAI,IAA0B;IAC9D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAI,QAA8B;IACnE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,OAAO,WAAW,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,MAA0D,EAC1D,MAAc;IAEd,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,IAAI,eAAe,CAAC;QACvD,QAAQ,CAAC,8CAA8C,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC;QAC7E,MAAM,IAAI,KAAK,CAAC,sCAAsC,OAAO,EAAE,CAAC,CAAC;IACnE,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meetingRecordingRegistration.d.ts","sourceRoot":"","sources":["../../src/resolvers/meetingRecordingRegistration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAgC,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"meetingRecordingRegistration.d.ts","sourceRoot":"","sources":["../../src/resolvers/meetingRecordingRegistration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAgC,MAAM,sBAAsB,CAAC;AASjG,2GAA2G;AAC3G,MAAM,WAAW,4BAA4B;IAC3C,yFAAyF;IACzF,QAAQ,EAAE,MAAM,CAAC;IACjB,mGAAmG;IACnG,QAAQ,EAAE,MAAM,CAAC;IACjB,8HAA8H;IAC9H,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kEAAkE;IAClE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,sDAAsD;AACtD,MAAM,WAAW,kCAAkC;IACjD,uFAAuF;IACvF,OAAO,EAAE,OAAO,CAAC;IACjB,kHAAkH;IAClH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gFAAgF;IAChF,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,4GAA4G;AAC5G,MAAM,WAAW,kCAAkC;IACjD;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;OAIG;IACH,0BAA0B,CAAC,EAAE,MAAM,CAAC;CACrC;AAED;;;;;;;;;GASG;AACH,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,4BAA4B,EACpC,WAAW,EAAE,QAAQ,EACrB,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,CAAC,EAAE,kCAAkC,GAC1C,OAAO,CAAC,kCAAkC,CAAC,CAoE7C;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,CAqBtJ;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,4BAA4B,EACpC,WAAW,EAAE,QAAQ,EACrB,QAAQ,EAAE,iBAAiB,GAC1B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUxB;AAiGD,kCAAkC;AAClC,UAAU,mBAAmB;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAsB,2BAA2B,CAC/C,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,EACrB,mBAAmB,EAAE,MAAM,EAC3B,WAAW,EAAE,QAAQ,GACpB,OAAO,CAAC,mBAAmB,CAAC,CAwB9B"}
|
|
@@ -42,6 +42,7 @@
|
|
|
42
42
|
* @author MemberJunction.com
|
|
43
43
|
*/
|
|
44
44
|
import { RunView, LogError, LogStatus } from '@memberjunction/core';
|
|
45
|
+
import { EscapeSQLString } from '@memberjunction/global';
|
|
45
46
|
import { FileStorageEngine } from '@memberjunction/storage';
|
|
46
47
|
const CONVERSATION_ENTITY = 'MJ: Conversations';
|
|
47
48
|
const FILES_ENTITY = 'MJ: Files';
|
|
@@ -174,7 +175,7 @@ async function findConversationByEgressID(egressID, contextUser, provider) {
|
|
|
174
175
|
const rv = RunView.FromMetadataProvider(provider);
|
|
175
176
|
const found = await rv.RunView({
|
|
176
177
|
EntityName: CONVERSATION_ENTITY,
|
|
177
|
-
ExtraFilter: `EgressID='${
|
|
178
|
+
ExtraFilter: `EgressID='${EscapeSQLString(egressID)}' AND Type='${EscapeSQLString(MEETING_ROOM_CONVERSATION_TYPE)}' AND (IsArchived IS NULL OR IsArchived=0)`,
|
|
178
179
|
Fields: ['ID'],
|
|
179
180
|
OrderBy: '__mj_CreatedAt DESC',
|
|
180
181
|
MaxRows: 1,
|
|
@@ -190,7 +191,7 @@ async function findConversationByRoomName(roomName, contextUser, provider) {
|
|
|
190
191
|
const rv = RunView.FromMetadataProvider(provider);
|
|
191
192
|
const found = await rv.RunView({
|
|
192
193
|
EntityName: CONVERSATION_ENTITY,
|
|
193
|
-
ExtraFilter: `ExternalID='${
|
|
194
|
+
ExtraFilter: `ExternalID='${EscapeSQLString(roomName)}' AND Type='${EscapeSQLString(MEETING_ROOM_CONVERSATION_TYPE)}' AND (IsArchived IS NULL OR IsArchived=0)`,
|
|
194
195
|
Fields: ['ID'],
|
|
195
196
|
OrderBy: '__mj_CreatedAt DESC',
|
|
196
197
|
MaxRows: 1,
|
|
@@ -304,8 +305,4 @@ function resolveStorageAccountForProvider(providerID) {
|
|
|
304
305
|
const accounts = FileStorageEngine.Instance.GetAccountsByProviderID(providerID);
|
|
305
306
|
return accounts.length > 0 ? accounts[0].ID : null;
|
|
306
307
|
}
|
|
307
|
-
/** Escapes single quotes for safe embedding in an `ExtraFilter` literal. */
|
|
308
|
-
function escapeSql(value) {
|
|
309
|
-
return value.replace(/'/g, "''");
|
|
310
|
-
}
|
|
311
308
|
//# sourceMappingURL=meetingRecordingRegistration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meetingRecordingRegistration.js","sourceRoot":"","sources":["../../src/resolvers/meetingRecordingRegistration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,EAA+B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"meetingRecordingRegistration.js","sourceRoot":"","sources":["../../src/resolvers/meetingRecordingRegistration.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,8 @@
|
|
|
18
18
|
import { BaseSingleton } from '@memberjunction/global';
|
|
19
19
|
/** The token's `typ` claim — the route rejects any token whose `typ` differs. */
|
|
20
20
|
export declare const MEDIA_ACCESS_TOKEN_TYPE = "media-access";
|
|
21
|
+
/** The upload staging token's `typ` claim. */
|
|
22
|
+
export declare const MEDIA_UPLOAD_ACCESS_TOKEN_TYPE = "media-upload";
|
|
21
23
|
/** Default media-access token lifetime (hours). Long enough to cover a full playback session. */
|
|
22
24
|
export declare const MEDIA_ACCESS_DEFAULT_TTL_HOURS = 4;
|
|
23
25
|
/** The claims carried by a media-access token. */
|
|
@@ -59,6 +61,21 @@ export declare class MediaAccessKeyManager extends BaseSingleton<MediaAccessKeyM
|
|
|
59
61
|
Token: string;
|
|
60
62
|
ExpiresAt: Date;
|
|
61
63
|
};
|
|
64
|
+
/**
|
|
65
|
+
* Mints a signed upload staging token for a user, expiring after `ttlMinutes` (default 10 minutes).
|
|
66
|
+
*/
|
|
67
|
+
SignUpload(userId: string, ttlMinutes?: number): {
|
|
68
|
+
Token: string;
|
|
69
|
+
ExpiresAt: Date;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Verifies an upload staging token.
|
|
73
|
+
*/
|
|
74
|
+
VerifyUpload(token: string): {
|
|
75
|
+
Valid: boolean;
|
|
76
|
+
UserId?: string;
|
|
77
|
+
Error?: string;
|
|
78
|
+
};
|
|
62
79
|
/**
|
|
63
80
|
* Verifies a token's signature, expiry, and `typ`. Returns the typed claims on
|
|
64
81
|
* success. Never throws — an invalid/expired/malformed token returns `{ Valid: false }`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaAccessKeys.d.ts","sourceRoot":"","sources":["../../src/rest/MediaAccessKeys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAKvD,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,iBAAiB,CAAC;AAEtD,iGAAiG;AACjG,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAEhD,kDAAkD;AAClD,MAAM,WAAW,sBAAsB;IACrC,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,uGAAuG;IACvG,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,GAAG,EAAE,OAAO,uBAAuB,CAAC;CACrC;AAED,iDAAiD;AACjD,MAAM,MAAM,sBAAsB,GAC9B;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAA;CAAE,GAC/C;IAAE,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAErB;;;;;;GAMG;AACH,qBAAa,qBAAsB,SAAQ,aAAa,CAAC,qBAAqB,CAAC;IAC7E,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,YAAY,CAAS;;IAO7B,WAAkB,QAAQ,IAAI,qBAAqB,CAElD;IAED,mFAAmF;IACnF,OAAO,CAAC,YAAY;
|
|
1
|
+
{"version":3,"file":"MediaAccessKeys.d.ts","sourceRoot":"","sources":["../../src/rest/MediaAccessKeys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAKvD,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,iBAAiB,CAAC;AAEtD,8CAA8C;AAC9C,eAAO,MAAM,8BAA8B,iBAAiB,CAAC;AAE7D,iGAAiG;AACjG,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAEhD,kDAAkD;AAClD,MAAM,WAAW,sBAAsB;IACrC,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,uGAAuG;IACvG,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,GAAG,EAAE,OAAO,uBAAuB,CAAC;CACrC;AAED,iDAAiD;AACjD,MAAM,MAAM,sBAAsB,GAC9B;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAA;CAAE,GAC/C;IAAE,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAErB;;;;;;GAMG;AACH,qBAAa,qBAAsB,SAAQ,aAAa,CAAC,qBAAqB,CAAC;IAC7E,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,YAAY,CAAS;;IAO7B,WAAkB,QAAQ,IAAI,qBAAqB,CAElD;IAED,mFAAmF;IACnF,OAAO,CAAC,YAAY;IA2BpB;;;;OAIG;IACI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAuC,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,IAAI,CAAA;KAAE;IASlI;;OAEG;IACI,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAE,MAAW,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,IAAI,CAAA;KAAE;IAS9F;;OAEG;IACI,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAkBvF;;;OAGG;IACI,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,sBAAsB;CAmBrD"}
|
|
@@ -21,6 +21,8 @@ import { randomBytes } from 'node:crypto';
|
|
|
21
21
|
import jwt from 'jsonwebtoken';
|
|
22
22
|
/** The token's `typ` claim — the route rejects any token whose `typ` differs. */
|
|
23
23
|
export const MEDIA_ACCESS_TOKEN_TYPE = 'media-access';
|
|
24
|
+
/** The upload staging token's `typ` claim. */
|
|
25
|
+
export const MEDIA_UPLOAD_ACCESS_TOKEN_TYPE = 'media-upload';
|
|
24
26
|
/** Default media-access token lifetime (hours). Long enough to cover a full playback session. */
|
|
25
27
|
export const MEDIA_ACCESS_DEFAULT_TTL_HOURS = 4;
|
|
26
28
|
/**
|
|
@@ -42,7 +44,13 @@ export class MediaAccessKeyManager extends BaseSingleton {
|
|
|
42
44
|
}
|
|
43
45
|
/** Resolves the signing secret once, preferring the deployment's symmetric key. */
|
|
44
46
|
ensureSecret() {
|
|
45
|
-
if (this._initialized) {
|
|
47
|
+
if (this._initialized && this.secret) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const store = this.GetGlobalObjectStore();
|
|
51
|
+
if (store && typeof store['___MEDIA_ACCESS_SECRET___'] === 'string') {
|
|
52
|
+
this.secret = store['___MEDIA_ACCESS_SECRET___'];
|
|
53
|
+
this._initialized = true;
|
|
46
54
|
return;
|
|
47
55
|
}
|
|
48
56
|
const configured = process.env.MJ_BASE_ENCRYPTION_KEY?.trim();
|
|
@@ -55,6 +63,9 @@ export class MediaAccessKeyManager extends BaseSingleton {
|
|
|
55
63
|
'media-access tokens. Outstanding media URLs will be invalidated on restart. Set ' +
|
|
56
64
|
'MJ_BASE_ENCRYPTION_KEY for stable signing.');
|
|
57
65
|
}
|
|
66
|
+
if (store) {
|
|
67
|
+
store['___MEDIA_ACCESS_SECRET___'] = this.secret;
|
|
68
|
+
}
|
|
58
69
|
this._initialized = true;
|
|
59
70
|
}
|
|
60
71
|
/**
|
|
@@ -70,6 +81,36 @@ export class MediaAccessKeyManager extends BaseSingleton {
|
|
|
70
81
|
const expiresAt = new Date(Date.now() + expiresInSeconds * 1000);
|
|
71
82
|
return { Token: token, ExpiresAt: expiresAt };
|
|
72
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* Mints a signed upload staging token for a user, expiring after `ttlMinutes` (default 10 minutes).
|
|
86
|
+
*/
|
|
87
|
+
SignUpload(userId, ttlMinutes = 10) {
|
|
88
|
+
this.ensureSecret();
|
|
89
|
+
const claims = { fileId: '*', userId, typ: MEDIA_UPLOAD_ACCESS_TOKEN_TYPE };
|
|
90
|
+
const expiresInSeconds = Math.floor(ttlMinutes * 60);
|
|
91
|
+
const token = jwt.sign(claims, this.secret, { algorithm: 'HS256', expiresIn: expiresInSeconds });
|
|
92
|
+
const expiresAt = new Date(Date.now() + expiresInSeconds * 1000);
|
|
93
|
+
return { Token: token, ExpiresAt: expiresAt };
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Verifies an upload staging token.
|
|
97
|
+
*/
|
|
98
|
+
VerifyUpload(token) {
|
|
99
|
+
this.ensureSecret();
|
|
100
|
+
try {
|
|
101
|
+
const decoded = jwt.verify(token, this.secret, { algorithms: ['HS256'] });
|
|
102
|
+
if (typeof decoded === 'object' && decoded !== null &&
|
|
103
|
+
decoded.typ === MEDIA_UPLOAD_ACCESS_TOKEN_TYPE &&
|
|
104
|
+
typeof decoded.userId === 'string') {
|
|
105
|
+
return { Valid: true, UserId: decoded.userId };
|
|
106
|
+
}
|
|
107
|
+
return { Valid: false, Error: 'Invalid token payload format or claim mismatch' };
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
111
|
+
return { Valid: false, Error: msg };
|
|
112
|
+
}
|
|
113
|
+
}
|
|
73
114
|
/**
|
|
74
115
|
* Verifies a token's signature, expiry, and `typ`. Returns the typed claims on
|
|
75
116
|
* success. Never throws — an invalid/expired/malformed token returns `{ Valid: false }`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaAccessKeys.js","sourceRoot":"","sources":["../../src/rest/MediaAccessKeys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,GAAG,MAAM,cAAc,CAAC;AAE/B,iFAAiF;AACjF,MAAM,CAAC,MAAM,uBAAuB,GAAG,cAAc,CAAC;AAEtD,iGAAiG;AACjG,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAiBhD;;;;;;GAMG;AACH,MAAM,OAAO,qBAAsB,SAAQ,aAAoC;IAI7E,gFAAgF;IAChF;QACE,KAAK,EAAE,CAAC;QALF,WAAM,GAAG,EAAE,CAAC;QACZ,iBAAY,GAAG,KAAK,CAAC;IAK7B,CAAC;IAEM,MAAM,KAAK,QAAQ;QACxB,OAAO,qBAAqB,CAAC,WAAW,EAAyB,CAAC;IACpE,CAAC;IAED,mFAAmF;IAC3E,YAAY;QAClB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"MediaAccessKeys.js","sourceRoot":"","sources":["../../src/rest/MediaAccessKeys.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,8 +19,9 @@
|
|
|
19
19
|
*/
|
|
20
20
|
import { type Router } from 'express';
|
|
21
21
|
/**
|
|
22
|
-
* Builds the Express router exposing
|
|
23
|
-
* and
|
|
22
|
+
* Builds the Express router exposing:
|
|
23
|
+
* - `GET /media/:fileId` and `GET /media/:fileId/:filename` (Range streaming)
|
|
24
|
+
* - `POST /media/upload-stage` (Raw binary upload staging)
|
|
24
25
|
*/
|
|
25
26
|
export declare function createMediaStreamRouter(): Router;
|
|
26
27
|
//# sourceMappingURL=MediaStreamHandler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaStreamHandler.d.ts","sourceRoot":"","sources":["../../src/rest/MediaStreamHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAgB,EAAE,KAAK,MAAM,EAA+B,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"MediaStreamHandler.d.ts","sourceRoot":"","sources":["../../src/rest/MediaStreamHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAgB,EAAE,KAAK,MAAM,EAA+B,MAAM,SAAS,CAAC;AAkB5E;;;;GAIG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAkBhD"}
|