@friggframework/core 2.0.0--canary.522.cbd3d5a.0 → 2.0.0--canary.517.35ee143.0
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/CHANGELOG.md +67 -66
- package/CLAUDE.md +124 -148
- package/README.md +130 -165
- package/admin-scripts/index.js +16 -30
- package/admin-scripts/repositories/{admin-api-key-repository-documentdb.js → admin-process-repository-documentdb.js} +5 -5
- package/admin-scripts/repositories/{admin-api-key-repository-factory.js → admin-process-repository-factory.js} +15 -19
- package/admin-scripts/repositories/admin-process-repository-interface.js +150 -0
- package/admin-scripts/repositories/admin-process-repository-mongo.js +213 -0
- package/admin-scripts/repositories/admin-process-repository-postgres.js +251 -0
- package/admin-scripts/repositories/script-schedule-repository-factory.js +2 -6
- package/admin-scripts/repositories/script-schedule-repository-interface.js +14 -36
- package/admin-scripts/repositories/script-schedule-repository-mongo.js +13 -25
- package/admin-scripts/repositories/script-schedule-repository-postgres.js +13 -25
- package/application/commands/admin-script-commands.js +102 -266
- package/application/commands/integration-commands.js +6 -12
- package/application/index.js +3 -1
- package/assertions/get.js +4 -1
- package/associations/association.js +57 -59
- package/associations/model.js +41 -41
- package/core/CLAUDE.md +156 -222
- package/core/Worker.js +1 -5
- package/credential/repositories/credential-repository-documentdb.js +1 -71
- package/credential/repositories/credential-repository-interface.js +2 -8
- package/credential/repositories/credential-repository-mongo.js +4 -45
- package/credential/repositories/credential-repository-postgres.js +3 -44
- package/credential/repositories/credential-repository.js +4 -6
- package/credential/use-cases/get-credential-for-user.js +3 -21
- package/credential/use-cases/update-authentication-status.js +2 -5
- package/database/MONGODB_TRANSACTION_FIX.md +52 -72
- package/database/adapters/lambda-invoker.js +7 -8
- package/database/config.js +13 -15
- package/database/documentdb-encryption-service.js +13 -29
- package/database/documentdb-utils.js +12 -21
- package/database/encryption/README.md +36 -53
- package/database/encryption/encryption-schema-registry.js +9 -21
- package/database/encryption/field-encryption-service.js +4 -15
- package/database/encryption/logger.js +2 -3
- package/database/encryption/prisma-encryption-extension.js +8 -5
- package/database/index.js +2 -4
- package/database/models/IndividualUser.js +15 -15
- package/database/models/OrganizationUser.js +4 -6
- package/database/models/UserModel.js +2 -2
- package/database/models/WebsocketConnection.js +1 -4
- package/database/mongoose.js +2 -2
- package/database/prisma.js +14 -22
- package/database/repositories/health-check-repository-documentdb.js +7 -22
- package/database/repositories/health-check-repository-factory.js +3 -9
- package/database/repositories/health-check-repository-interface.js +5 -15
- package/database/repositories/health-check-repository-mongodb.js +6 -9
- package/database/repositories/health-check-repository-postgres.js +1 -1
- package/database/repositories/migration-status-repository-s3.js +5 -10
- package/database/use-cases/check-database-health-use-case.js +2 -3
- package/database/use-cases/check-database-state-use-case.js +7 -9
- package/database/use-cases/get-database-state-via-worker-use-case.js +12 -15
- package/database/use-cases/get-migration-status-use-case.js +2 -4
- package/database/use-cases/run-database-migration-use-case.js +9 -41
- package/database/use-cases/test-encryption-use-case.js +5 -4
- package/database/use-cases/trigger-database-migration-use-case.js +8 -9
- package/database/utils/mongodb-collection-utils.js +3 -11
- package/database/utils/mongodb-schema-init.js +4 -10
- package/database/utils/prisma-runner.js +74 -144
- package/database/utils/prisma-schema-parser.js +2 -2
- package/docs/PROCESS_MANAGEMENT_QUEUE_SPEC.md +80 -135
- package/encrypt/Cryptor.js +2 -8
- package/errors/fetch-error.js +1 -1
- package/generated/prisma-mongodb/edge.js +16 -59
- package/generated/prisma-mongodb/index-browser.js +12 -62
- package/generated/prisma-mongodb/index.d.ts +4850 -8136
- package/generated/prisma-mongodb/index.js +16 -59
- package/generated/prisma-mongodb/package.json +1 -1
- package/generated/prisma-mongodb/schema.prisma +33 -75
- package/generated/prisma-mongodb/wasm.js +16 -59
- package/generated/prisma-postgresql/edge.js +15 -59
- package/generated/prisma-postgresql/index-browser.js +11 -62
- package/generated/prisma-postgresql/index.d.ts +5963 -8930
- package/generated/prisma-postgresql/index.js +15 -59
- package/generated/prisma-postgresql/package.json +1 -1
- package/generated/prisma-postgresql/schema.prisma +33 -73
- package/generated/prisma-postgresql/wasm.js +15 -59
- package/handlers/WEBHOOKS.md +81 -104
- package/handlers/app-definition-loader.js +1 -1
- package/handlers/app-handler-helpers.js +2 -14
- package/handlers/backend-utils.js +1 -0
- package/handlers/database-migration-handler.js +45 -64
- package/handlers/middleware/admin-auth.js +53 -0
- package/handlers/routers/HEALTHCHECK.md +135 -170
- package/handlers/routers/auth.js +2 -23
- package/handlers/routers/db-migration.handler.js +3 -2
- package/handlers/routers/db-migration.js +33 -69
- package/handlers/routers/health.js +8 -23
- package/handlers/routers/integration-defined-routers.js +4 -4
- package/handlers/routers/integration-webhook-routers.js +7 -17
- package/handlers/routers/websocket.js +3 -9
- package/handlers/use-cases/check-integrations-health-use-case.js +6 -13
- package/handlers/workers/db-migration.js +26 -54
- package/index.js +9 -5
- package/integrations/WEBHOOK-QUICKSTART.md +14 -21
- package/integrations/index.js +0 -4
- package/integrations/integration-base.js +6 -9
- package/integrations/integration-router.js +146 -1817
- package/integrations/options.js +20 -47
- package/integrations/repositories/integration-repository-documentdb.js +24 -53
- package/integrations/repositories/integration-repository-factory.js +2 -6
- package/integrations/repositories/integration-repository-interface.js +9 -27
- package/integrations/repositories/integration-repository-postgres.js +3 -3
- package/integrations/repositories/process-repository-factory.js +1 -0
- package/integrations/repositories/process-repository-interface.js +5 -9
- package/integrations/repositories/process-repository-mongo.js +3 -7
- package/integrations/repositories/process-repository-postgres.js +2 -2
- package/integrations/tests/doubles/config-capturing-integration.js +8 -9
- package/integrations/tests/doubles/dummy-integration-class.js +8 -81
- package/integrations/tests/doubles/test-integration-repository.js +11 -51
- package/integrations/use-cases/create-integration.js +32 -36
- package/integrations/use-cases/create-process.js +9 -20
- package/integrations/use-cases/delete-integration-for-user.js +4 -5
- package/integrations/use-cases/get-integration-for-user.js +10 -25
- package/integrations/use-cases/get-integration-instance-by-definition.js +7 -13
- package/integrations/use-cases/get-integrations-for-user.js +1 -4
- package/integrations/use-cases/get-possible-integrations.js +1 -1
- package/integrations/use-cases/get-process.js +6 -5
- package/integrations/use-cases/index.js +1 -3
- package/integrations/use-cases/load-integration-context.js +5 -1
- package/integrations/use-cases/update-process-state.js +8 -10
- package/integrations/utils/map-integration-dto.js +3 -9
- package/jest-setup.js +1 -1
- package/jest-teardown.js +1 -1
- package/lambda/TimeoutCatcher.js +30 -32
- package/lambda/index.js +1 -1
- package/logs/index.js +3 -3
- package/modules/module.js +1 -3
- package/modules/repositories/module-repository-documentdb.js +48 -114
- package/modules/repositories/module-repository-interface.js +0 -13
- package/modules/repositories/module-repository-mongo.js +6 -46
- package/modules/repositories/module-repository-postgres.js +6 -48
- package/modules/repositories/module-repository.js +1 -34
- package/modules/requester/api-key.js +2 -0
- package/modules/requester/basic.js +1 -0
- package/modules/requester/oauth-2.js +2 -3
- package/modules/test/mock-api/definition.js +10 -15
- package/modules/test/mock-api/mocks/hubspot.js +36 -36
- package/modules/tests/doubles/test-module-factory.js +4 -10
- package/modules/tests/doubles/test-module-repository.js +1 -1
- package/modules/use-cases/get-entities-for-user.js +1 -1
- package/modules/use-cases/get-entity-options-by-id.js +6 -8
- package/modules/use-cases/get-module.js +9 -12
- package/modules/use-cases/process-authorization-callback.js +6 -12
- package/modules/use-cases/refresh-entity-options.js +6 -8
- package/modules/use-cases/test-module-auth.js +6 -8
- package/modules/utils/map-module-dto.js +2 -2
- package/package.json +5 -7
- package/prisma-mongodb/schema.prisma +33 -75
- package/prisma-postgresql/schema.prisma +33 -73
- package/queues/queuer-util.js +1 -5
- package/syncs/model.js +51 -51
- package/syncs/repositories/sync-repository-documentdb.js +19 -39
- package/syncs/repositories/sync-repository-interface.js +2 -6
- package/syncs/repositories/sync-repository-postgres.js +13 -19
- package/syncs/sync.js +100 -104
- package/token/repositories/token-repository-factory.js +3 -1
- package/types/assertions/index.d.ts +72 -72
- package/types/associations/index.d.ts +57 -57
- package/types/core/index.d.ts +53 -59
- package/types/database/index.d.ts +2 -2
- package/types/encrypt/index.d.ts +3 -3
- package/types/errors/index.d.ts +54 -61
- package/types/eslint-config/index.d.ts +40 -40
- package/types/integrations/index.d.ts +183 -185
- package/types/lambda/index.d.ts +26 -26
- package/types/logs/index.d.ts +4 -4
- package/types/module-plugin/index.d.ts +237 -239
- package/types/prettier-config/index.d.ts +5 -5
- package/types/syncs/index.d.ts +108 -102
- package/types/test-environment/index.d.ts +14 -14
- package/types/tsconfig.json +93 -95
- package/user/tests/doubles/test-user-repository.js +2 -5
- package/user/use-cases/authenticate-user.js +4 -2
- package/user/use-cases/authenticate-with-shared-secret.js +1 -1
- package/user/use-cases/create-individual-user.js +7 -8
- package/user/use-cases/create-organization-user.js +1 -1
- package/user/use-cases/create-token-for-user-id.js +1 -1
- package/user/use-cases/get-user-from-adopter-jwt.js +2 -0
- package/user/use-cases/get-user-from-bearer-token.js +3 -7
- package/user/use-cases/get-user-from-x-frigg-headers.js +11 -14
- package/user/use-cases/login-user.js +8 -8
- package/user/user.js +4 -18
- package/utils/backend-path.js +2 -2
- package/utils/index.js +1 -4
- package/websocket/repositories/websocket-connection-repository-documentdb.js +8 -21
- package/websocket/repositories/websocket-connection-repository-mongo.js +4 -8
- package/websocket/repositories/websocket-connection-repository-postgres.js +4 -8
- package/websocket/repositories/websocket-connection-repository.js +4 -8
- package/admin-scripts/repositories/admin-api-key-repository-interface.js +0 -121
- package/admin-scripts/repositories/admin-api-key-repository-mongo.js +0 -155
- package/admin-scripts/repositories/admin-api-key-repository-postgres.js +0 -189
- package/admin-scripts/repositories/script-execution-repository-documentdb.js +0 -21
- package/admin-scripts/repositories/script-execution-repository-factory.js +0 -55
- package/admin-scripts/repositories/script-execution-repository-interface.js +0 -193
- package/admin-scripts/repositories/script-execution-repository-mongo.js +0 -278
- package/admin-scripts/repositories/script-execution-repository-postgres.js +0 -320
- package/credential/credential-router.js +0 -262
- package/credential/use-cases/delete-credential-for-user.js +0 -50
- package/credential/use-cases/list-credentials-for-user.js +0 -31
- package/credential/use-cases/reauthorize-credential.js +0 -103
- package/handlers/routers/admin.js +0 -450
- package/handlers/routers/docs.js +0 -180
- package/handlers/routers/middleware/loadUser.js +0 -39
- package/handlers/routers/middleware/requireAdmin.js +0 -41
- package/handlers/routers/middleware/requireLoggedInUser.js +0 -19
- package/integrations/use-cases/execute-proxy-request.js +0 -564
- package/modules/domain/entities/AuthorizationSession.js +0 -131
- package/modules/domain/entities/index.js +0 -10
- package/modules/repositories/authorization-session-repository-factory.js +0 -55
- package/modules/repositories/authorization-session-repository-interface.js +0 -75
- package/modules/repositories/authorization-session-repository-mongo.js +0 -169
- package/modules/repositories/authorization-session-repository-postgres.js +0 -170
- package/modules/use-cases/delete-module-entity.js +0 -23
- package/modules/use-cases/get-authorization-requirements.js +0 -110
- package/modules/use-cases/get-module-entity-by-id.js +0 -16
- package/modules/use-cases/process-authorization-step.js +0 -160
- package/modules/use-cases/start-authorization-session.js +0 -86
- package/modules/use-cases/update-module-entity.js +0 -27
- package/openapi/openapi-spec-generator.js +0 -370
- package/openapi/openapi-v1.yaml +0 -1360
- package/openapi/openapi-v2.yaml +0 -1535
- package/user/use-cases/delete-user.js +0 -47
package/modules/module.js
CHANGED
|
@@ -42,9 +42,7 @@ class Module extends Delegate {
|
|
|
42
42
|
const apiParams = {
|
|
43
43
|
...this.definition.env,
|
|
44
44
|
delegate: this,
|
|
45
|
-
...(this.credential?.data
|
|
46
|
-
? this.apiParamsFromCredential(this.credential.data)
|
|
47
|
-
: {}), // Handle case when credential is undefined
|
|
45
|
+
...(this.credential?.data ? this.apiParamsFromCredential(this.credential.data) : {}), // Handle case when credential is undefined
|
|
48
46
|
...this.apiParamsFromEntity(this.entity),
|
|
49
47
|
};
|
|
50
48
|
this.api = new this.apiClass(apiParams);
|
|
@@ -9,9 +9,7 @@ const {
|
|
|
9
9
|
deleteOne,
|
|
10
10
|
} = require('../../database/documentdb-utils');
|
|
11
11
|
const { ModuleRepositoryInterface } = require('./module-repository-interface');
|
|
12
|
-
const {
|
|
13
|
-
DocumentDBEncryptionService,
|
|
14
|
-
} = require('../../database/documentdb-encryption-service');
|
|
12
|
+
const { DocumentDBEncryptionService } = require('../../database/documentdb-encryption-service');
|
|
15
13
|
|
|
16
14
|
/**
|
|
17
15
|
* Module/Entity repository for DocumentDB.
|
|
@@ -52,34 +50,16 @@ class ModuleRepositoryDocumentDB extends ModuleRepositoryInterface {
|
|
|
52
50
|
}
|
|
53
51
|
const filter = { userId: objectId };
|
|
54
52
|
const docs = await findMany(this.prisma, 'Entity', filter);
|
|
55
|
-
const credentialMap = await this._fetchCredentialsBulk(
|
|
56
|
-
|
|
57
|
-
);
|
|
58
|
-
return docs.map((doc) =>
|
|
59
|
-
this._mapEntity(
|
|
60
|
-
doc,
|
|
61
|
-
credentialMap.get(fromObjectId(doc.credentialId)) || null
|
|
62
|
-
)
|
|
63
|
-
);
|
|
53
|
+
const credentialMap = await this._fetchCredentialsBulk(docs.map((doc) => doc.credentialId));
|
|
54
|
+
return docs.map((doc) => this._mapEntity(doc, credentialMap.get(fromObjectId(doc.credentialId)) || null));
|
|
64
55
|
}
|
|
65
56
|
|
|
66
57
|
async findEntitiesByIds(entitiesIds) {
|
|
67
|
-
const ids = (entitiesIds || [])
|
|
68
|
-
.map((id) => toObjectId(id))
|
|
69
|
-
.filter(Boolean);
|
|
58
|
+
const ids = (entitiesIds || []).map((id) => toObjectId(id)).filter(Boolean);
|
|
70
59
|
if (ids.length === 0) return [];
|
|
71
|
-
const docs = await findMany(this.prisma, 'Entity', {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
const credentialMap = await this._fetchCredentialsBulk(
|
|
75
|
-
docs.map((doc) => doc.credentialId)
|
|
76
|
-
);
|
|
77
|
-
return docs.map((doc) =>
|
|
78
|
-
this._mapEntity(
|
|
79
|
-
doc,
|
|
80
|
-
credentialMap.get(fromObjectId(doc.credentialId)) || null
|
|
81
|
-
)
|
|
82
|
-
);
|
|
60
|
+
const docs = await findMany(this.prisma, 'Entity', { _id: { $in: ids } });
|
|
61
|
+
const credentialMap = await this._fetchCredentialsBulk(docs.map((doc) => doc.credentialId));
|
|
62
|
+
return docs.map((doc) => this._mapEntity(doc, credentialMap.get(fromObjectId(doc.credentialId)) || null));
|
|
83
63
|
}
|
|
84
64
|
|
|
85
65
|
async findEntitiesByUserIdAndModuleName(userId, moduleName) {
|
|
@@ -92,15 +72,8 @@ class ModuleRepositoryDocumentDB extends ModuleRepositoryInterface {
|
|
|
92
72
|
moduleName,
|
|
93
73
|
};
|
|
94
74
|
const docs = await findMany(this.prisma, 'Entity', filter);
|
|
95
|
-
const credentialMap = await this._fetchCredentialsBulk(
|
|
96
|
-
|
|
97
|
-
);
|
|
98
|
-
return docs.map((doc) =>
|
|
99
|
-
this._mapEntity(
|
|
100
|
-
doc,
|
|
101
|
-
credentialMap.get(fromObjectId(doc.credentialId)) || null
|
|
102
|
-
)
|
|
103
|
-
);
|
|
75
|
+
const credentialMap = await this._fetchCredentialsBulk(docs.map((doc) => doc.credentialId));
|
|
76
|
+
return docs.map((doc) => this._mapEntity(doc, credentialMap.get(fromObjectId(doc.credentialId)) || null));
|
|
104
77
|
}
|
|
105
78
|
|
|
106
79
|
async unsetCredential(entityId) {
|
|
@@ -128,23 +101,16 @@ class ModuleRepositoryDocumentDB extends ModuleRepositoryInterface {
|
|
|
128
101
|
}
|
|
129
102
|
|
|
130
103
|
async createEntity(entityData) {
|
|
131
|
-
const isGlobal = entityData.isGlobal || false;
|
|
132
|
-
|
|
133
104
|
const document = {
|
|
134
|
-
userId:
|
|
135
|
-
credentialId:
|
|
136
|
-
toObjectId(entityData.credential || entityData.credentialId) ||
|
|
137
|
-
null,
|
|
105
|
+
userId: toObjectId(entityData.user || entityData.userId),
|
|
106
|
+
credentialId: toObjectId(entityData.credential || entityData.credentialId) || null,
|
|
138
107
|
name: entityData.name ?? null,
|
|
139
108
|
moduleName: entityData.moduleName ?? null,
|
|
140
109
|
externalId: entityData.externalId ?? null,
|
|
141
110
|
accountId: entityData.accountId ?? null,
|
|
142
|
-
isGlobal,
|
|
143
111
|
};
|
|
144
112
|
const insertedId = await insertOne(this.prisma, 'Entity', document);
|
|
145
|
-
const created = await findOne(this.prisma, 'Entity', {
|
|
146
|
-
_id: insertedId,
|
|
147
|
-
});
|
|
113
|
+
const created = await findOne(this.prisma, 'Entity', { _id: insertedId });
|
|
148
114
|
const credential = await this._fetchCredential(created?.credentialId);
|
|
149
115
|
return this._mapEntity(created, credential);
|
|
150
116
|
}
|
|
@@ -154,27 +120,17 @@ class ModuleRepositoryDocumentDB extends ModuleRepositoryInterface {
|
|
|
154
120
|
if (!objectId) return null;
|
|
155
121
|
const updatePayload = {};
|
|
156
122
|
if (updates.user !== undefined || updates.userId !== undefined) {
|
|
157
|
-
const userVal =
|
|
158
|
-
updates.user !== undefined ? updates.user : updates.userId;
|
|
123
|
+
const userVal = updates.user !== undefined ? updates.user : updates.userId;
|
|
159
124
|
updatePayload.userId = toObjectId(userVal) || null;
|
|
160
125
|
}
|
|
161
|
-
if (
|
|
162
|
-
updates.credential !== undefined
|
|
163
|
-
updates.credentialId !== undefined
|
|
164
|
-
) {
|
|
165
|
-
const credVal =
|
|
166
|
-
updates.credential !== undefined
|
|
167
|
-
? updates.credential
|
|
168
|
-
: updates.credentialId;
|
|
126
|
+
if (updates.credential !== undefined || updates.credentialId !== undefined) {
|
|
127
|
+
const credVal = updates.credential !== undefined ? updates.credential : updates.credentialId;
|
|
169
128
|
updatePayload.credentialId = toObjectId(credVal) || null;
|
|
170
129
|
}
|
|
171
130
|
if (updates.name !== undefined) updatePayload.name = updates.name;
|
|
172
|
-
if (updates.moduleName !== undefined)
|
|
173
|
-
|
|
174
|
-
if (updates.
|
|
175
|
-
updatePayload.externalId = updates.externalId;
|
|
176
|
-
if (updates.accountId !== undefined)
|
|
177
|
-
updatePayload.accountId = updates.accountId;
|
|
131
|
+
if (updates.moduleName !== undefined) updatePayload.moduleName = updates.moduleName;
|
|
132
|
+
if (updates.externalId !== undefined) updatePayload.externalId = updates.externalId;
|
|
133
|
+
if (updates.accountId !== undefined) updatePayload.accountId = updates.accountId;
|
|
178
134
|
const result = await updateOne(
|
|
179
135
|
this.prisma,
|
|
180
136
|
'Entity',
|
|
@@ -191,9 +147,7 @@ class ModuleRepositoryDocumentDB extends ModuleRepositoryInterface {
|
|
|
191
147
|
async deleteEntity(entityId) {
|
|
192
148
|
const objectId = toObjectId(entityId);
|
|
193
149
|
if (!objectId) return false;
|
|
194
|
-
const result = await deleteOne(this.prisma, 'Entity', {
|
|
195
|
-
_id: objectId,
|
|
196
|
-
});
|
|
150
|
+
const result = await deleteOne(this.prisma, 'Entity', { _id: objectId });
|
|
197
151
|
const deleted = result?.n ?? 0;
|
|
198
152
|
return deleted > 0;
|
|
199
153
|
}
|
|
@@ -209,17 +163,13 @@ class ModuleRepositoryDocumentDB extends ModuleRepositoryInterface {
|
|
|
209
163
|
|
|
210
164
|
// Use raw findOne to bypass Prisma encryption extension
|
|
211
165
|
const rawCredential = await findOne(this.prisma, 'Credential', {
|
|
212
|
-
_id: objectId
|
|
166
|
+
_id: objectId
|
|
213
167
|
});
|
|
214
168
|
|
|
215
169
|
if (!rawCredential) return null;
|
|
216
170
|
|
|
217
171
|
// Decrypt sensitive fields using service
|
|
218
|
-
const decryptedCredential =
|
|
219
|
-
await this.encryptionService.decryptFields(
|
|
220
|
-
'Credential',
|
|
221
|
-
rawCredential
|
|
222
|
-
);
|
|
172
|
+
const decryptedCredential = await this.encryptionService.decryptFields('Credential', rawCredential);
|
|
223
173
|
|
|
224
174
|
// Return in same format
|
|
225
175
|
const credential = {
|
|
@@ -229,15 +179,12 @@ class ModuleRepositoryDocumentDB extends ModuleRepositoryInterface {
|
|
|
229
179
|
authIsValid: decryptedCredential.authIsValid ?? null,
|
|
230
180
|
createdAt: decryptedCredential.createdAt,
|
|
231
181
|
updatedAt: decryptedCredential.updatedAt,
|
|
232
|
-
data: decryptedCredential.data
|
|
182
|
+
data: decryptedCredential.data
|
|
233
183
|
};
|
|
234
184
|
|
|
235
185
|
return this._convertCredentialIds(credential);
|
|
236
186
|
} catch (error) {
|
|
237
|
-
console.error(
|
|
238
|
-
`Failed to fetch/decrypt credential ${id}:`,
|
|
239
|
-
error.message
|
|
240
|
-
);
|
|
187
|
+
console.error(`Failed to fetch/decrypt credential ${id}:`, error.message);
|
|
241
188
|
// Return null instead of throwing to allow graceful degradation
|
|
242
189
|
// This repository is read-only (doesn't create/update credentials)
|
|
243
190
|
// Entities can still be loaded even if their credential is corrupted/unreadable
|
|
@@ -255,55 +202,45 @@ class ModuleRepositoryDocumentDB extends ModuleRepositoryInterface {
|
|
|
255
202
|
|
|
256
203
|
try {
|
|
257
204
|
// Convert string IDs to ObjectIds for bulk query
|
|
258
|
-
const objectIds = ids.map(
|
|
205
|
+
const objectIds = ids.map(id => toObjectId(id)).filter(Boolean);
|
|
259
206
|
if (objectIds.length === 0) return new Map();
|
|
260
207
|
|
|
261
208
|
// Use raw findMany to bypass Prisma encryption extension
|
|
262
209
|
const rawCredentials = await findMany(this.prisma, 'Credential', {
|
|
263
|
-
_id: { $in: objectIds }
|
|
210
|
+
_id: { $in: objectIds }
|
|
264
211
|
});
|
|
265
212
|
|
|
266
213
|
// Decrypt all credentials in parallel
|
|
267
|
-
const decryptionPromises = rawCredentials.map(
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
const decryptedCredential =
|
|
272
|
-
await this.encryptionService.decryptFields(
|
|
273
|
-
'Credential',
|
|
274
|
-
rawCredential
|
|
275
|
-
);
|
|
214
|
+
const decryptionPromises = rawCredentials.map(async (rawCredential) => {
|
|
215
|
+
try {
|
|
216
|
+
// Decrypt sensitive fields using service
|
|
217
|
+
const decryptedCredential = await this.encryptionService.decryptFields('Credential', rawCredential);
|
|
276
218
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
};
|
|
219
|
+
// Build credential object in same format as Prisma would return
|
|
220
|
+
const credential = {
|
|
221
|
+
id: fromObjectId(decryptedCredential._id),
|
|
222
|
+
userId: fromObjectId(decryptedCredential.userId),
|
|
223
|
+
externalId: decryptedCredential.externalId ?? null,
|
|
224
|
+
authIsValid: decryptedCredential.authIsValid ?? null,
|
|
225
|
+
createdAt: decryptedCredential.createdAt,
|
|
226
|
+
updatedAt: decryptedCredential.updatedAt,
|
|
227
|
+
data: decryptedCredential.data
|
|
228
|
+
};
|
|
288
229
|
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
error.message
|
|
295
|
-
);
|
|
296
|
-
return null;
|
|
297
|
-
}
|
|
230
|
+
return this._convertCredentialIds(credential);
|
|
231
|
+
} catch (error) {
|
|
232
|
+
const credId = fromObjectId(rawCredential._id);
|
|
233
|
+
console.error(`Failed to decrypt credential ${credId}:`, error.message);
|
|
234
|
+
return null;
|
|
298
235
|
}
|
|
299
|
-
);
|
|
236
|
+
});
|
|
300
237
|
|
|
301
238
|
// Wait for all decryptions to complete
|
|
302
239
|
const decryptedCredentials = await Promise.all(decryptionPromises);
|
|
303
240
|
|
|
304
241
|
// Build Map from results, filtering out nulls
|
|
305
242
|
const map = new Map();
|
|
306
|
-
decryptedCredentials.forEach(
|
|
243
|
+
decryptedCredentials.forEach(credential => {
|
|
307
244
|
if (credential) {
|
|
308
245
|
map.set(credential.id, credential);
|
|
309
246
|
}
|
|
@@ -344,15 +281,12 @@ class ModuleRepositoryDocumentDB extends ModuleRepositoryInterface {
|
|
|
344
281
|
if (userObj) query.userId = userObj;
|
|
345
282
|
}
|
|
346
283
|
if (filter.credential || filter.credentialId) {
|
|
347
|
-
const credObj = toObjectId(
|
|
348
|
-
filter.credential || filter.credentialId
|
|
349
|
-
);
|
|
284
|
+
const credObj = toObjectId(filter.credential || filter.credentialId);
|
|
350
285
|
if (credObj) query.credentialId = credObj;
|
|
351
286
|
}
|
|
352
287
|
if (filter.name) query.name = filter.name;
|
|
353
288
|
if (filter.moduleName) query.moduleName = filter.moduleName;
|
|
354
289
|
if (filter.externalId) query.externalId = filter.externalId;
|
|
355
|
-
if (filter.isGlobal !== undefined) query.isGlobal = filter.isGlobal;
|
|
356
290
|
return query;
|
|
357
291
|
}
|
|
358
292
|
|
|
@@ -365,9 +299,9 @@ class ModuleRepositoryDocumentDB extends ModuleRepositoryInterface {
|
|
|
365
299
|
name: doc?.name ?? null,
|
|
366
300
|
externalId: doc?.externalId ?? null,
|
|
367
301
|
moduleName: doc?.moduleName ?? null,
|
|
368
|
-
isGlobal: doc?.isGlobal ?? null,
|
|
369
302
|
};
|
|
370
303
|
}
|
|
371
304
|
}
|
|
372
305
|
|
|
373
306
|
module.exports = { ModuleRepositoryDocumentDB };
|
|
307
|
+
|
|
@@ -91,19 +91,6 @@ class ModuleRepositoryInterface {
|
|
|
91
91
|
throw new Error('Method findEntity must be implemented by subclass');
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
/**
|
|
95
|
-
* Find entities matching filter criteria
|
|
96
|
-
*
|
|
97
|
-
* @param {Object} filter - Filter criteria
|
|
98
|
-
* @returns {Promise<Array>} Array of entity objects
|
|
99
|
-
* @abstract
|
|
100
|
-
*/
|
|
101
|
-
async findEntitiesBy(filter) {
|
|
102
|
-
throw new Error(
|
|
103
|
-
'Method findEntitiesBy must be implemented by subclass'
|
|
104
|
-
);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
94
|
/**
|
|
108
95
|
* Create a new entity
|
|
109
96
|
*
|
|
@@ -58,9 +58,7 @@ class ModuleRepositoryMongo extends ModuleRepositoryInterface {
|
|
|
58
58
|
return new Map();
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
const validIds = credentialIds.filter(
|
|
62
|
-
(id) => id !== null && id !== undefined
|
|
63
|
-
);
|
|
61
|
+
const validIds = credentialIds.filter(id => id !== null && id !== undefined);
|
|
64
62
|
|
|
65
63
|
if (validIds.length === 0) {
|
|
66
64
|
return new Map();
|
|
@@ -120,9 +118,7 @@ class ModuleRepositoryMongo extends ModuleRepositoryInterface {
|
|
|
120
118
|
where: { userId },
|
|
121
119
|
});
|
|
122
120
|
|
|
123
|
-
const credentialIds = entities
|
|
124
|
-
.map((e) => e.credentialId)
|
|
125
|
-
.filter(Boolean);
|
|
121
|
+
const credentialIds = entities.map(e => e.credentialId).filter(Boolean);
|
|
126
122
|
const credentialMap = await this._fetchCredentialsBulk(credentialIds);
|
|
127
123
|
|
|
128
124
|
return entities.map((e) => ({
|
|
@@ -148,9 +144,7 @@ class ModuleRepositoryMongo extends ModuleRepositoryInterface {
|
|
|
148
144
|
where: { id: { in: entitiesIds } },
|
|
149
145
|
});
|
|
150
146
|
|
|
151
|
-
const credentialIds = entities
|
|
152
|
-
.map((e) => e.credentialId)
|
|
153
|
-
.filter(Boolean);
|
|
147
|
+
const credentialIds = entities.map(e => e.credentialId).filter(Boolean);
|
|
154
148
|
const credentialMap = await this._fetchCredentialsBulk(credentialIds);
|
|
155
149
|
|
|
156
150
|
return entities.map((e) => ({
|
|
@@ -180,9 +174,7 @@ class ModuleRepositoryMongo extends ModuleRepositoryInterface {
|
|
|
180
174
|
},
|
|
181
175
|
});
|
|
182
176
|
|
|
183
|
-
const credentialIds = entities
|
|
184
|
-
.map((e) => e.credentialId)
|
|
185
|
-
.filter(Boolean);
|
|
177
|
+
const credentialIds = entities.map(e => e.credentialId).filter(Boolean);
|
|
186
178
|
const credentialMap = await this._fetchCredentialsBulk(credentialIds);
|
|
187
179
|
|
|
188
180
|
return entities.map((e) => ({
|
|
@@ -239,35 +231,9 @@ class ModuleRepositoryMongo extends ModuleRepositoryInterface {
|
|
|
239
231
|
name: entity.name,
|
|
240
232
|
externalId: entity.externalId,
|
|
241
233
|
moduleName: entity.moduleName,
|
|
242
|
-
isGlobal: entity.isGlobal,
|
|
243
234
|
};
|
|
244
235
|
}
|
|
245
236
|
|
|
246
|
-
/**
|
|
247
|
-
* Find entities matching filter criteria
|
|
248
|
-
* @param {Object} filter - Filter criteria (e.g., { isGlobal: true, moduleName: 'api-name' })
|
|
249
|
-
* @returns {Promise<Array>} Array of entity objects with string IDs
|
|
250
|
-
*/
|
|
251
|
-
async findEntitiesBy(filter) {
|
|
252
|
-
const where = this._convertFilterToWhere(filter);
|
|
253
|
-
const entities = await this.prisma.entity.findMany({
|
|
254
|
-
where,
|
|
255
|
-
include: { credential: true },
|
|
256
|
-
});
|
|
257
|
-
|
|
258
|
-
return entities.map((e) => ({
|
|
259
|
-
id: e.id,
|
|
260
|
-
accountId: e.accountId,
|
|
261
|
-
credential: e.credential,
|
|
262
|
-
userId: e.userId,
|
|
263
|
-
name: e.name,
|
|
264
|
-
externalId: e.externalId,
|
|
265
|
-
type: e.subType,
|
|
266
|
-
moduleName: e.moduleName,
|
|
267
|
-
isGlobal: e.isGlobal,
|
|
268
|
-
}));
|
|
269
|
-
}
|
|
270
|
-
|
|
271
237
|
/**
|
|
272
238
|
* Create a new entity
|
|
273
239
|
* Replaces: Entity.create(entityData)
|
|
@@ -276,16 +242,13 @@ class ModuleRepositoryMongo extends ModuleRepositoryInterface {
|
|
|
276
242
|
* @returns {Promise<Object>} Created entity object with string IDs
|
|
277
243
|
*/
|
|
278
244
|
async createEntity(entityData) {
|
|
279
|
-
const isGlobal = entityData.isGlobal || false;
|
|
280
|
-
|
|
281
245
|
const data = {
|
|
282
|
-
userId:
|
|
246
|
+
userId: entityData.user || entityData.userId,
|
|
283
247
|
credentialId: entityData.credential || entityData.credentialId,
|
|
284
248
|
name: entityData.name,
|
|
285
249
|
moduleName: entityData.moduleName,
|
|
286
250
|
externalId: entityData.externalId,
|
|
287
251
|
accountId: entityData.accountId,
|
|
288
|
-
isGlobal,
|
|
289
252
|
};
|
|
290
253
|
|
|
291
254
|
const entity = await this.prisma.entity.create({
|
|
@@ -302,7 +265,6 @@ class ModuleRepositoryMongo extends ModuleRepositoryInterface {
|
|
|
302
265
|
name: entity.name,
|
|
303
266
|
externalId: entity.externalId,
|
|
304
267
|
moduleName: entity.moduleName,
|
|
305
|
-
isGlobal: entity.isGlobal,
|
|
306
268
|
};
|
|
307
269
|
}
|
|
308
270
|
|
|
@@ -406,9 +368,7 @@ class ModuleRepositoryMongo extends ModuleRepositoryInterface {
|
|
|
406
368
|
if (filter.credentialId) where.credentialId = filter.credentialId;
|
|
407
369
|
if (filter.name) where.name = filter.name;
|
|
408
370
|
if (filter.moduleName) where.moduleName = filter.moduleName;
|
|
409
|
-
if (filter.externalId)
|
|
410
|
-
where.externalId = this._toString(filter.externalId);
|
|
411
|
-
if (filter.isGlobal !== undefined) where.isGlobal = filter.isGlobal;
|
|
371
|
+
if (filter.externalId) where.externalId = this._toString(filter.externalId);
|
|
412
372
|
|
|
413
373
|
return where;
|
|
414
374
|
}
|
|
@@ -87,9 +87,7 @@ class ModuleRepositoryPostgres extends ModuleRepositoryInterface {
|
|
|
87
87
|
return new Map();
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
const validIds = credentialIds.filter(
|
|
91
|
-
(id) => id !== null && id !== undefined
|
|
92
|
-
);
|
|
90
|
+
const validIds = credentialIds.filter(id => id !== null && id !== undefined);
|
|
93
91
|
|
|
94
92
|
if (validIds.length === 0) {
|
|
95
93
|
return new Map();
|
|
@@ -156,9 +154,7 @@ class ModuleRepositoryPostgres extends ModuleRepositoryInterface {
|
|
|
156
154
|
where: { userId: intUserId },
|
|
157
155
|
});
|
|
158
156
|
|
|
159
|
-
const credentialIds = entities
|
|
160
|
-
.map((e) => e.credentialId)
|
|
161
|
-
.filter(Boolean);
|
|
157
|
+
const credentialIds = entities.map(e => e.credentialId).filter(Boolean);
|
|
162
158
|
const credentialMap = await this._fetchCredentialsBulk(credentialIds);
|
|
163
159
|
|
|
164
160
|
return entities.map((e) => ({
|
|
@@ -186,9 +182,7 @@ class ModuleRepositoryPostgres extends ModuleRepositoryInterface {
|
|
|
186
182
|
where: { id: { in: intIds } },
|
|
187
183
|
});
|
|
188
184
|
|
|
189
|
-
const credentialIds = entities
|
|
190
|
-
.map((e) => e.credentialId)
|
|
191
|
-
.filter(Boolean);
|
|
185
|
+
const credentialIds = entities.map(e => e.credentialId).filter(Boolean);
|
|
192
186
|
const credentialMap = await this._fetchCredentialsBulk(credentialIds);
|
|
193
187
|
|
|
194
188
|
return entities.map((e) => ({
|
|
@@ -220,9 +214,7 @@ class ModuleRepositoryPostgres extends ModuleRepositoryInterface {
|
|
|
220
214
|
},
|
|
221
215
|
});
|
|
222
216
|
|
|
223
|
-
const credentialIds = entities
|
|
224
|
-
.map((e) => e.credentialId)
|
|
225
|
-
.filter(Boolean);
|
|
217
|
+
const credentialIds = entities.map(e => e.credentialId).filter(Boolean);
|
|
226
218
|
const credentialMap = await this._fetchCredentialsBulk(credentialIds);
|
|
227
219
|
|
|
228
220
|
return entities.map((e) => ({
|
|
@@ -280,37 +272,9 @@ class ModuleRepositoryPostgres extends ModuleRepositoryInterface {
|
|
|
280
272
|
name: entity.name,
|
|
281
273
|
externalId: entity.externalId,
|
|
282
274
|
moduleName: entity.moduleName,
|
|
283
|
-
isGlobal: entity.isGlobal,
|
|
284
275
|
};
|
|
285
276
|
}
|
|
286
277
|
|
|
287
|
-
/**
|
|
288
|
-
* Find entities matching filter criteria
|
|
289
|
-
* Replaces: Entity.find(filter).populate('credential')
|
|
290
|
-
*
|
|
291
|
-
* @param {Object} filter - Filter criteria (e.g., { isGlobal: true, type: 'someType', status: 'connected' })
|
|
292
|
-
* @returns {Promise<Array>} Array of entity objects with string IDs
|
|
293
|
-
*/
|
|
294
|
-
async findEntitiesBy(filter) {
|
|
295
|
-
const where = this._convertFilterToWhere(filter);
|
|
296
|
-
const entities = await this.prisma.entity.findMany({
|
|
297
|
-
where,
|
|
298
|
-
include: { credential: true },
|
|
299
|
-
});
|
|
300
|
-
|
|
301
|
-
return entities.map((e) => ({
|
|
302
|
-
id: e.id.toString(),
|
|
303
|
-
accountId: e.accountId,
|
|
304
|
-
credential: this._convertCredentialIds(e.credential),
|
|
305
|
-
userId: e.userId?.toString(),
|
|
306
|
-
name: e.name,
|
|
307
|
-
externalId: e.externalId,
|
|
308
|
-
type: e.subType,
|
|
309
|
-
moduleName: e.moduleName,
|
|
310
|
-
isGlobal: e.isGlobal,
|
|
311
|
-
}));
|
|
312
|
-
}
|
|
313
|
-
|
|
314
278
|
/**
|
|
315
279
|
* Create a new entity
|
|
316
280
|
* Replaces: Entity.create(entityData)
|
|
@@ -319,10 +283,8 @@ class ModuleRepositoryPostgres extends ModuleRepositoryInterface {
|
|
|
319
283
|
* @returns {Promise<Object>} Created entity object with string IDs
|
|
320
284
|
*/
|
|
321
285
|
async createEntity(entityData) {
|
|
322
|
-
const isGlobal = entityData.isGlobal || false;
|
|
323
|
-
|
|
324
286
|
const data = {
|
|
325
|
-
userId:
|
|
287
|
+
userId: this._convertId(entityData.user || entityData.userId),
|
|
326
288
|
credentialId: this._convertId(
|
|
327
289
|
entityData.credential || entityData.credentialId
|
|
328
290
|
),
|
|
@@ -330,7 +292,6 @@ class ModuleRepositoryPostgres extends ModuleRepositoryInterface {
|
|
|
330
292
|
moduleName: entityData.moduleName,
|
|
331
293
|
externalId: entityData.externalId,
|
|
332
294
|
accountId: entityData.accountId,
|
|
333
|
-
isGlobal,
|
|
334
295
|
};
|
|
335
296
|
|
|
336
297
|
const entity = await this.prisma.entity.create({
|
|
@@ -347,7 +308,6 @@ class ModuleRepositoryPostgres extends ModuleRepositoryInterface {
|
|
|
347
308
|
name: entity.name,
|
|
348
309
|
externalId: entity.externalId,
|
|
349
310
|
moduleName: entity.moduleName,
|
|
350
|
-
isGlobal: entity.isGlobal,
|
|
351
311
|
};
|
|
352
312
|
}
|
|
353
313
|
|
|
@@ -457,9 +417,7 @@ class ModuleRepositoryPostgres extends ModuleRepositoryInterface {
|
|
|
457
417
|
where.credentialId = this._convertId(filter.credentialId);
|
|
458
418
|
if (filter.name) where.name = filter.name;
|
|
459
419
|
if (filter.moduleName) where.moduleName = filter.moduleName;
|
|
460
|
-
if (filter.externalId)
|
|
461
|
-
where.externalId = this._toString(filter.externalId);
|
|
462
|
-
if (filter.isGlobal !== undefined) where.isGlobal = filter.isGlobal;
|
|
420
|
+
if (filter.externalId) where.externalId = this._toString(filter.externalId);
|
|
463
421
|
|
|
464
422
|
return where;
|
|
465
423
|
}
|
|
@@ -169,37 +169,9 @@ class ModuleRepository extends ModuleRepositoryInterface {
|
|
|
169
169
|
name: entity.name,
|
|
170
170
|
externalId: entity.externalId,
|
|
171
171
|
moduleName: entity.moduleName,
|
|
172
|
-
isGlobal: entity.isGlobal,
|
|
173
172
|
};
|
|
174
173
|
}
|
|
175
174
|
|
|
176
|
-
/**
|
|
177
|
-
* Find entities matching filter criteria
|
|
178
|
-
* Replaces: Entity.find(filter).populate('credential')
|
|
179
|
-
*
|
|
180
|
-
* @param {Object} filter - Filter criteria
|
|
181
|
-
* @returns {Promise<Array>} Array of entity objects
|
|
182
|
-
*/
|
|
183
|
-
async findEntitiesBy(filter) {
|
|
184
|
-
const where = this._convertFilterToWhere(filter);
|
|
185
|
-
const entities = await this.prisma.entity.findMany({
|
|
186
|
-
where,
|
|
187
|
-
include: { credential: true },
|
|
188
|
-
});
|
|
189
|
-
|
|
190
|
-
return entities.map((e) => ({
|
|
191
|
-
id: e.id,
|
|
192
|
-
accountId: e.accountId,
|
|
193
|
-
credential: e.credential,
|
|
194
|
-
userId: e.userId,
|
|
195
|
-
name: e.name,
|
|
196
|
-
externalId: e.externalId,
|
|
197
|
-
type: e.subType,
|
|
198
|
-
moduleName: e.moduleName,
|
|
199
|
-
isGlobal: e.isGlobal,
|
|
200
|
-
}));
|
|
201
|
-
}
|
|
202
|
-
|
|
203
175
|
/**
|
|
204
176
|
* Create a new entity
|
|
205
177
|
* Replaces: Entity.create(entityData)
|
|
@@ -208,17 +180,14 @@ class ModuleRepository extends ModuleRepositoryInterface {
|
|
|
208
180
|
* @returns {Promise<Object>} Created entity object
|
|
209
181
|
*/
|
|
210
182
|
async createEntity(entityData) {
|
|
211
|
-
const isGlobal = entityData.isGlobal || false;
|
|
212
|
-
|
|
213
183
|
// Convert Mongoose-style fields to Prisma
|
|
214
184
|
const data = {
|
|
215
|
-
userId:
|
|
185
|
+
userId: entityData.user || entityData.userId,
|
|
216
186
|
credentialId: entityData.credential || entityData.credentialId,
|
|
217
187
|
name: entityData.name,
|
|
218
188
|
moduleName: entityData.moduleName,
|
|
219
189
|
externalId: entityData.externalId,
|
|
220
190
|
accountId: entityData.accountId,
|
|
221
|
-
isGlobal,
|
|
222
191
|
};
|
|
223
192
|
|
|
224
193
|
const entity = await this.prisma.entity.create({
|
|
@@ -234,7 +203,6 @@ class ModuleRepository extends ModuleRepositoryInterface {
|
|
|
234
203
|
name: entity.name,
|
|
235
204
|
externalId: entity.externalId,
|
|
236
205
|
moduleName: entity.moduleName,
|
|
237
|
-
isGlobal: entity.isGlobal,
|
|
238
206
|
};
|
|
239
207
|
}
|
|
240
208
|
|
|
@@ -340,7 +308,6 @@ class ModuleRepository extends ModuleRepositoryInterface {
|
|
|
340
308
|
if (filter.name) where.name = filter.name;
|
|
341
309
|
if (filter.moduleName) where.moduleName = filter.moduleName;
|
|
342
310
|
if (filter.externalId) where.externalId = filter.externalId;
|
|
343
|
-
if (filter.isGlobal !== undefined) where.isGlobal = filter.isGlobal;
|
|
344
311
|
|
|
345
312
|
return where;
|
|
346
313
|
}
|
|
@@ -2,7 +2,9 @@ const { Requester } = require('./requester');
|
|
|
2
2
|
const { get } = require('../../assertions');
|
|
3
3
|
const { ModuleConstants } = require('../ModuleConstants');
|
|
4
4
|
|
|
5
|
+
|
|
5
6
|
class ApiKeyRequester extends Requester {
|
|
7
|
+
|
|
6
8
|
static requesterType = ModuleConstants.authType.apiKey;
|
|
7
9
|
|
|
8
10
|
constructor(params) {
|
|
@@ -3,6 +3,7 @@ const { get } = require('../../assertions');
|
|
|
3
3
|
const { ModuleConstants } = require('../ModuleConstants');
|
|
4
4
|
|
|
5
5
|
class OAuth2Requester extends Requester {
|
|
6
|
+
|
|
6
7
|
static requesterType = ModuleConstants.authType.oauth2;
|
|
7
8
|
|
|
8
9
|
constructor(params) {
|
|
@@ -43,9 +44,7 @@ class OAuth2Requester extends Requester {
|
|
|
43
44
|
);
|
|
44
45
|
|
|
45
46
|
this.accessTokenExpire = new Date(Date.now() + accessExpiresIn * 1000);
|
|
46
|
-
this.refreshTokenExpire = new Date(
|
|
47
|
-
Date.now() + refreshExpiresIn * 1000
|
|
48
|
-
);
|
|
47
|
+
this.refreshTokenExpire = new Date(Date.now() + refreshExpiresIn * 1000);
|
|
49
48
|
|
|
50
49
|
await this.notify(this.DLGT_TOKEN_UPDATE);
|
|
51
50
|
}
|