aimeat 1.4.8 → 1.6.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/dist/.env.example +15 -0
- package/dist/bin/aimeat.js +0 -0
- package/dist/locales/en.json +139 -6
- package/dist/locales/fi.json +139 -6
- package/dist/public/css/views/admin.css +97 -0
- package/dist/public/css/views/profile.css +37 -0
- package/dist/public/js/services/admin.js +12 -1
- package/dist/public/js/services/boards.js +6 -3
- package/dist/public/js/services/memory.js +10 -0
- package/dist/public/views/admin/federation-tab.js +153 -7
- package/dist/public/views/admin/ghii-tab.js +2 -0
- package/dist/public/views/admin/stats-tab.js +480 -187
- package/dist/public/views/admin.js +1 -1
- package/dist/public/views/profile/access-tab.js +161 -58
- package/dist/public/views/profile/agents-tab.js +13 -1
- package/dist/public/views/profile/boards-tab.js +12 -0
- package/dist/public/views/profile/data-wallet-tab.js +29 -2
- package/dist/public/views/profile/knowledge-tab.js +64 -2
- package/dist/public/views/profile/landing-page.js +9 -6
- package/dist/public/views/profile/memory-tab.js +92 -4
- package/dist/src/auth/jwt.d.ts +6 -0
- package/dist/src/auth/jwt.d.ts.map +1 -1
- package/dist/src/auth/jwt.js +6 -0
- package/dist/src/auth/jwt.js.map +1 -1
- package/dist/src/auth/middleware.d.ts +7 -0
- package/dist/src/auth/middleware.d.ts.map +1 -1
- package/dist/src/auth/middleware.js +20 -0
- package/dist/src/auth/middleware.js.map +1 -1
- package/dist/src/auth/node-keys.d.ts.map +1 -1
- package/dist/src/auth/node-keys.js +3 -0
- package/dist/src/auth/node-keys.js.map +1 -1
- package/dist/src/config.d.ts +13 -0
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +14 -0
- package/dist/src/config.js.map +1 -1
- package/dist/src/index.js +41 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/extensions.js +1 -1
- package/dist/src/mcp/extensions.js.map +1 -1
- package/dist/src/middleware/federation-proxy.d.ts +35 -0
- package/dist/src/middleware/federation-proxy.d.ts.map +1 -0
- package/dist/src/middleware/federation-proxy.js +92 -0
- package/dist/src/middleware/federation-proxy.js.map +1 -0
- package/dist/src/middleware/rate-limit.d.ts.map +1 -1
- package/dist/src/middleware/rate-limit.js +4 -1
- package/dist/src/middleware/rate-limit.js.map +1 -1
- package/dist/src/models/schemas.d.ts +45 -0
- package/dist/src/models/schemas.d.ts.map +1 -1
- package/dist/src/models/schemas.js +37 -1
- package/dist/src/models/schemas.js.map +1 -1
- package/dist/src/routes/actions.d.ts.map +1 -1
- package/dist/src/routes/actions.js +8 -2
- package/dist/src/routes/actions.js.map +1 -1
- package/dist/src/routes/admin-agents.d.ts.map +1 -1
- package/dist/src/routes/admin-agents.js +1 -0
- package/dist/src/routes/admin-agents.js.map +1 -1
- package/dist/src/routes/admin-features.d.ts.map +1 -1
- package/dist/src/routes/admin-features.js +2 -0
- package/dist/src/routes/admin-features.js.map +1 -1
- package/dist/src/routes/admin-monitoring.d.ts.map +1 -1
- package/dist/src/routes/admin-monitoring.js +7 -0
- package/dist/src/routes/admin-monitoring.js.map +1 -1
- package/dist/src/routes/admin.d.ts.map +1 -1
- package/dist/src/routes/admin.js +33 -15
- package/dist/src/routes/admin.js.map +1 -1
- package/dist/src/routes/agents.d.ts.map +1 -1
- package/dist/src/routes/agents.js +38 -5
- package/dist/src/routes/agents.js.map +1 -1
- package/dist/src/routes/apps.d.ts.map +1 -1
- package/dist/src/routes/apps.js +5 -1
- package/dist/src/routes/apps.js.map +1 -1
- package/dist/src/routes/auth.d.ts.map +1 -1
- package/dist/src/routes/auth.js +19 -1
- package/dist/src/routes/auth.js.map +1 -1
- package/dist/src/routes/boards.d.ts.map +1 -1
- package/dist/src/routes/boards.js +14 -7
- package/dist/src/routes/boards.js.map +1 -1
- package/dist/src/routes/consent.d.ts.map +1 -1
- package/dist/src/routes/consent.js +2 -1
- package/dist/src/routes/consent.js.map +1 -1
- package/dist/src/routes/disputes.js +4 -4
- package/dist/src/routes/disputes.js.map +1 -1
- package/dist/src/routes/extensions.d.ts.map +1 -1
- package/dist/src/routes/extensions.js +72 -21
- package/dist/src/routes/extensions.js.map +1 -1
- package/dist/src/routes/federation-auth.d.ts +15 -0
- package/dist/src/routes/federation-auth.d.ts.map +1 -0
- package/dist/src/routes/federation-auth.js +122 -0
- package/dist/src/routes/federation-auth.js.map +1 -0
- package/dist/src/routes/federation-genesis.d.ts +2 -1
- package/dist/src/routes/federation-genesis.d.ts.map +1 -1
- package/dist/src/routes/federation-genesis.js +58 -2
- package/dist/src/routes/federation-genesis.js.map +1 -1
- package/dist/src/routes/federation-peer.d.ts.map +1 -1
- package/dist/src/routes/federation-peer.js +91 -2
- package/dist/src/routes/federation-peer.js.map +1 -1
- package/dist/src/routes/federation-sync.d.ts.map +1 -1
- package/dist/src/routes/federation-sync.js +14 -1
- package/dist/src/routes/federation-sync.js.map +1 -1
- package/dist/src/routes/federation.d.ts +2 -1
- package/dist/src/routes/federation.d.ts.map +1 -1
- package/dist/src/routes/federation.js +4 -2
- package/dist/src/routes/federation.js.map +1 -1
- package/dist/src/routes/flags.d.ts.map +1 -1
- package/dist/src/routes/flags.js +2 -1
- package/dist/src/routes/flags.js.map +1 -1
- package/dist/src/routes/foundry.d.ts.map +1 -1
- package/dist/src/routes/foundry.js +2 -2
- package/dist/src/routes/foundry.js.map +1 -1
- package/dist/src/routes/generator.d.ts.map +1 -1
- package/dist/src/routes/generator.js +2 -2
- package/dist/src/routes/generator.js.map +1 -1
- package/dist/src/routes/ghii.d.ts +2 -1
- package/dist/src/routes/ghii.d.ts.map +1 -1
- package/dist/src/routes/ghii.js +154 -34
- package/dist/src/routes/ghii.js.map +1 -1
- package/dist/src/routes/libs.js +42 -10
- package/dist/src/routes/libs.js.map +1 -1
- package/dist/src/routes/memory.d.ts.map +1 -1
- package/dist/src/routes/memory.js +164 -0
- package/dist/src/routes/memory.js.map +1 -1
- package/dist/src/routes/owners.d.ts.map +1 -1
- package/dist/src/routes/owners.js +104 -8
- package/dist/src/routes/owners.js.map +1 -1
- package/dist/src/routes/packages.js +1 -1
- package/dist/src/routes/packages.js.map +1 -1
- package/dist/src/routes/stats.d.ts +13 -0
- package/dist/src/routes/stats.d.ts.map +1 -1
- package/dist/src/routes/stats.js +54 -4
- package/dist/src/routes/stats.js.map +1 -1
- package/dist/src/routes/storage-files.d.ts.map +1 -1
- package/dist/src/routes/storage-files.js +5 -1
- package/dist/src/routes/storage-files.js.map +1 -1
- package/dist/src/routes/upload.js +2 -2
- package/dist/src/routes/upload.js.map +1 -1
- package/dist/src/routes/wallet.d.ts.map +1 -1
- package/dist/src/routes/wallet.js +2 -1
- package/dist/src/routes/wallet.js.map +1 -1
- package/dist/src/routes/work.d.ts.map +1 -1
- package/dist/src/routes/work.js +2 -1
- package/dist/src/routes/work.js.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.d.ts +3 -1
- package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.js +10 -7
- package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
- package/dist/src/server-bootstrap/service-init.d.ts +2 -0
- package/dist/src/server-bootstrap/service-init.d.ts.map +1 -1
- package/dist/src/server-bootstrap/service-init.js +10 -1
- package/dist/src/server-bootstrap/service-init.js.map +1 -1
- package/dist/src/server-bootstrap/static-files.d.ts.map +1 -1
- package/dist/src/server-bootstrap/static-files.js +10 -7
- package/dist/src/server-bootstrap/static-files.js.map +1 -1
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +5 -2
- package/dist/src/server.js.map +1 -1
- package/dist/src/services/capability-invoke.d.ts.map +1 -1
- package/dist/src/services/capability-invoke.js +5 -18
- package/dist/src/services/capability-invoke.js.map +1 -1
- package/dist/src/services/config-schema.d.ts.map +1 -1
- package/dist/src/services/config-schema.js +13 -0
- package/dist/src/services/config-schema.js.map +1 -1
- package/dist/src/services/consent.d.ts.map +1 -1
- package/dist/src/services/consent.js +1 -10
- package/dist/src/services/consent.js.map +1 -1
- package/dist/src/services/directory.d.ts.map +1 -1
- package/dist/src/services/directory.js +10 -4
- package/dist/src/services/directory.js.map +1 -1
- package/dist/src/services/email.d.ts +17 -4
- package/dist/src/services/email.d.ts.map +1 -1
- package/dist/src/services/email.js +30 -12
- package/dist/src/services/email.js.map +1 -1
- package/dist/src/services/extension-runtime.d.ts.map +1 -1
- package/dist/src/services/extension-runtime.js +5 -0
- package/dist/src/services/extension-runtime.js.map +1 -1
- package/dist/src/services/federation.d.ts +8 -6
- package/dist/src/services/federation.d.ts.map +1 -1
- package/dist/src/services/federation.js +53 -1
- package/dist/src/services/federation.js.map +1 -1
- package/dist/src/services/mailbox-notification.d.ts +17 -0
- package/dist/src/services/mailbox-notification.d.ts.map +1 -1
- package/dist/src/services/mailbox-notification.js +25 -0
- package/dist/src/services/mailbox-notification.js.map +1 -1
- package/dist/src/services/memory-replication.d.ts.map +1 -1
- package/dist/src/services/memory-replication.js +3 -0
- package/dist/src/services/memory-replication.js.map +1 -1
- package/dist/src/services/morsel.d.ts.map +1 -1
- package/dist/src/services/morsel.js +10 -9
- package/dist/src/services/morsel.js.map +1 -1
- package/dist/src/services/password.d.ts +1 -6
- package/dist/src/services/password.d.ts.map +1 -1
- package/dist/src/services/password.js +19 -10
- package/dist/src/services/password.js.map +1 -1
- package/dist/src/services/push.d.ts +16 -0
- package/dist/src/services/push.d.ts.map +1 -1
- package/dist/src/services/push.js +20 -0
- package/dist/src/services/push.js.map +1 -1
- package/dist/src/services/quota.d.ts.map +1 -1
- package/dist/src/services/quota.js +2 -1
- package/dist/src/services/quota.js.map +1 -1
- package/dist/src/services/scheduler.d.ts.map +1 -1
- package/dist/src/services/scheduler.js +17 -1
- package/dist/src/services/scheduler.js.map +1 -1
- package/dist/src/services/stats.d.ts +42 -2
- package/dist/src/services/stats.d.ts.map +1 -1
- package/dist/src/services/stats.js +176 -1
- package/dist/src/services/stats.js.map +1 -1
- package/dist/src/services/totp.js +2 -2
- package/dist/src/storage/interface.d.ts +15 -2
- package/dist/src/storage/interface.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/index.d.ts +12 -1
- package/dist/src/storage/providers/mongodb/index.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/index.js +110 -10
- package/dist/src/storage/providers/mongodb/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/index.d.ts +12 -1
- package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/index.js +118 -19
- package/dist/src/storage/providers/sqlite/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/action.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/action.js +5 -4
- package/dist/src/storage/providers/sqlite/repos/action.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/agent.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/agent.js +5 -4
- package/dist/src/storage/providers/sqlite/repos/agent.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/board.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/board.js +3 -2
- package/dist/src/storage/providers/sqlite/repos/board.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/consent.d.ts +1 -0
- package/dist/src/storage/providers/sqlite/repos/consent.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/consent.js +4 -0
- package/dist/src/storage/providers/sqlite/repos/consent.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/storage-file.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/storage-file.js +4 -2
- package/dist/src/storage/providers/sqlite/repos/storage-file.js.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.js +29 -0
- package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
- package/dist/src/storage/repositories/board.repository.d.ts +1 -1
- package/dist/src/storage/repositories/board.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/consent.repository.d.ts +1 -0
- package/dist/src/storage/repositories/consent.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/device-auth.repository.d.ts +1 -0
- package/dist/src/storage/repositories/device-auth.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/extension-instance.repository.d.ts +1 -0
- package/dist/src/storage/repositories/extension-instance.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/federation.repository.d.ts +1 -0
- package/dist/src/storage/repositories/federation.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/index.d.ts +1 -0
- package/dist/src/storage/repositories/index.d.ts.map +1 -1
- package/dist/src/storage/repositories/knowledge.repository.d.ts +2 -0
- package/dist/src/storage/repositories/knowledge.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/moderation.repository.d.ts +1 -0
- package/dist/src/storage/repositories/moderation.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/stats.repository.d.ts +12 -0
- package/dist/src/storage/repositories/stats.repository.d.ts.map +1 -0
- package/dist/src/storage/repositories/stats.repository.js +7 -0
- package/dist/src/storage/repositories/stats.repository.js.map +1 -0
- package/dist/src/storage/storage-factory.js +1 -0
- package/dist/src/storage/storage-factory.js.map +1 -1
- package/dist/src/utils/password-validation.d.ts +8 -0
- package/dist/src/utils/password-validation.d.ts.map +1 -0
- package/dist/src/utils/password-validation.js +25 -0
- package/dist/src/utils/password-validation.js.map +1 -0
- package/dist/src/utils/service-summary.d.ts +70 -0
- package/dist/src/utils/service-summary.d.ts.map +1 -0
- package/dist/src/utils/service-summary.js +105 -0
- package/dist/src/utils/service-summary.js.map +1 -0
- package/package.json +97 -75
- package/prisma/schema.prisma +30 -6
|
@@ -122,6 +122,7 @@ export class MongoStorage {
|
|
|
122
122
|
morselBalance: agent.morselBalance,
|
|
123
123
|
allowedOrigins: agent.allowedOrigins ?? [],
|
|
124
124
|
defaultScopes: agent.defaultScopes ?? ['*'],
|
|
125
|
+
federate: agent.federate ?? false,
|
|
125
126
|
createdAt: new Date(agent.createdAt),
|
|
126
127
|
lastSeen: new Date(agent.lastSeen),
|
|
127
128
|
},
|
|
@@ -531,6 +532,7 @@ export class MongoStorage {
|
|
|
531
532
|
tags: action.tags,
|
|
532
533
|
webhookUrl: action.webhookUrl ?? null,
|
|
533
534
|
semantic: action.semantic ?? null,
|
|
535
|
+
federate: action.federate ?? false,
|
|
534
536
|
createdAt: new Date(action.createdAt),
|
|
535
537
|
updatedAt: new Date(action.updatedAt),
|
|
536
538
|
},
|
|
@@ -731,6 +733,7 @@ export class MongoStorage {
|
|
|
731
733
|
visibility: board.visibility,
|
|
732
734
|
ownerGaii: board.ownerGaii,
|
|
733
735
|
allowedGaiis: board.allowedGaiis,
|
|
736
|
+
federate: board.federate ?? false,
|
|
734
737
|
createdAt: new Date(board.createdAt),
|
|
735
738
|
},
|
|
736
739
|
});
|
|
@@ -751,10 +754,13 @@ export class MongoStorage {
|
|
|
751
754
|
const rows = await this.prisma.board.findMany({ where });
|
|
752
755
|
return rows.map((r) => this.toBoardRecord(r));
|
|
753
756
|
}
|
|
754
|
-
async updateBoardVisibility(id, visibility) {
|
|
757
|
+
async updateBoardVisibility(id, visibility, federate) {
|
|
755
758
|
this.ensureReady();
|
|
756
759
|
try {
|
|
757
|
-
const
|
|
760
|
+
const data = { visibility };
|
|
761
|
+
if (federate !== undefined)
|
|
762
|
+
data.federate = federate;
|
|
763
|
+
const row = await this.prisma.board.update({ where: { boardId: id }, data });
|
|
758
764
|
return this.toBoardRecord(row);
|
|
759
765
|
}
|
|
760
766
|
catch {
|
|
@@ -1143,6 +1149,7 @@ export class MongoStorage {
|
|
|
1143
1149
|
size: file.size,
|
|
1144
1150
|
data: file.data,
|
|
1145
1151
|
tags: file.tags || [],
|
|
1152
|
+
federate: file.federate ?? false,
|
|
1146
1153
|
createdAt: new Date(file.createdAt),
|
|
1147
1154
|
},
|
|
1148
1155
|
});
|
|
@@ -1155,16 +1162,16 @@ export class MongoStorage {
|
|
|
1155
1162
|
});
|
|
1156
1163
|
if (!row)
|
|
1157
1164
|
return null;
|
|
1158
|
-
return { key: row.key, ownerGaii: row.ownerGaii, visibility: row.visibility, mimeType: row.mimeType, size: row.size, data: Buffer.from(row.data), tags: row.tags || [], createdAt: row.createdAt.toISOString() };
|
|
1165
|
+
return { key: row.key, ownerGaii: row.ownerGaii, visibility: row.visibility, mimeType: row.mimeType, size: row.size, data: Buffer.from(row.data), tags: row.tags || [], federate: row.federate ?? false, createdAt: row.createdAt.toISOString() };
|
|
1159
1166
|
}
|
|
1160
1167
|
async listStorageFiles(ownerGaii) {
|
|
1161
1168
|
this.ensureReady();
|
|
1162
1169
|
const rows = await this.prisma.storageFile.findMany({
|
|
1163
1170
|
where: { ownerGaii },
|
|
1164
|
-
select: { key: true, ownerGaii: true, visibility: true, mimeType: true, size: true, tags: true, createdAt: true },
|
|
1171
|
+
select: { key: true, ownerGaii: true, visibility: true, mimeType: true, size: true, tags: true, federate: true, createdAt: true },
|
|
1165
1172
|
});
|
|
1166
1173
|
return rows.map((r) => ({
|
|
1167
|
-
key: r.key, ownerGaii: r.ownerGaii, visibility: r.visibility, mimeType: r.mimeType, size: r.size, data: Buffer.alloc(0), tags: r.tags || [], createdAt: r.createdAt.toISOString(),
|
|
1174
|
+
key: r.key, ownerGaii: r.ownerGaii, visibility: r.visibility, mimeType: r.mimeType, size: r.size, data: Buffer.alloc(0), tags: r.tags || [], federate: r.federate ?? false, createdAt: r.createdAt.toISOString(),
|
|
1168
1175
|
}));
|
|
1169
1176
|
}
|
|
1170
1177
|
async deleteStorageFile(ownerGaii, key) {
|
|
@@ -1244,6 +1251,16 @@ export class MongoStorage {
|
|
|
1244
1251
|
return null;
|
|
1245
1252
|
}
|
|
1246
1253
|
}
|
|
1254
|
+
async deletePeeringRequest(id) {
|
|
1255
|
+
this.ensureReady();
|
|
1256
|
+
try {
|
|
1257
|
+
await this.prisma.peeringRequest.delete({ where: { requestId: id } });
|
|
1258
|
+
return true;
|
|
1259
|
+
}
|
|
1260
|
+
catch {
|
|
1261
|
+
return false;
|
|
1262
|
+
}
|
|
1263
|
+
}
|
|
1247
1264
|
// ── Chunked Uploads (kept in-memory — transient) ───────────
|
|
1248
1265
|
async createChunkedUpload(record) {
|
|
1249
1266
|
this.chunkedUploads.set(record.uploadId, record);
|
|
@@ -1283,19 +1300,19 @@ export class MongoStorage {
|
|
|
1283
1300
|
return { name: row.name, displayName: row.displayName ?? undefined, publicKey: row.publicKey, roles: row.roles, createdAt: row.createdAt.toISOString() };
|
|
1284
1301
|
}
|
|
1285
1302
|
toAgentRecord(row) {
|
|
1286
|
-
return { name: row.name, owner: row.owner, gaii: row.gaii, displayName: row.displayName ?? undefined, description: row.description ?? undefined, capabilities: row.capabilities, publicKey: row.publicKey, trustScore: row.trustScore, morselBalance: row.morselBalance, defaultScopes: row.defaultScopes?.length ? row.defaultScopes : undefined, allowedOrigins: row.allowedOrigins?.length ? row.allowedOrigins : undefined, createdAt: row.createdAt.toISOString(), lastSeen: row.lastSeen.toISOString() };
|
|
1303
|
+
return { name: row.name, owner: row.owner, gaii: row.gaii, displayName: row.displayName ?? undefined, description: row.description ?? undefined, capabilities: row.capabilities, publicKey: row.publicKey, trustScore: row.trustScore, morselBalance: row.morselBalance, defaultScopes: row.defaultScopes?.length ? row.defaultScopes : undefined, allowedOrigins: row.allowedOrigins?.length ? row.allowedOrigins : undefined, federate: row.federate ?? false, createdAt: row.createdAt.toISOString(), lastSeen: row.lastSeen.toISOString() };
|
|
1287
1304
|
}
|
|
1288
1305
|
toMemoryRecord(row) {
|
|
1289
1306
|
return { key: row.key, ownerGaii: row.ownerGaii, value: row.value, visibility: row.visibility, tags: row.tags, ttlHours: row.ttlHours, version: row.version, createdAt: row.createdAt.toISOString(), updatedAt: row.updatedAt.toISOString(), flagCount: row.flagCount ?? undefined, allowedOrigins: row.allowedOrigins?.length ? row.allowedOrigins : undefined };
|
|
1290
1307
|
}
|
|
1291
1308
|
toActionRecord(row) {
|
|
1292
|
-
return { id: row.actionId, providerGaii: row.providerGaii, displayName: row.displayName, description: row.description, category: row.category ?? undefined, inputSchema: row.inputSchema, outputSchema: row.outputSchema, pricing: { baseMorsels: row.pricingBaseMorsels, perUnit: row.pricingPerUnit }, estimatedTimeSeconds: row.estimatedTimeSeconds ?? undefined, maxInputSizeBytes: row.maxInputSizeBytes ?? undefined, tags: row.tags, webhookUrl: row.webhookUrl ?? undefined, semantic: row.semantic ?? undefined, createdAt: row.createdAt.toISOString(), updatedAt: row.updatedAt.toISOString() };
|
|
1309
|
+
return { id: row.actionId, providerGaii: row.providerGaii, displayName: row.displayName, description: row.description, category: row.category ?? undefined, inputSchema: row.inputSchema, outputSchema: row.outputSchema, pricing: { baseMorsels: row.pricingBaseMorsels, perUnit: row.pricingPerUnit }, estimatedTimeSeconds: row.estimatedTimeSeconds ?? undefined, maxInputSizeBytes: row.maxInputSizeBytes ?? undefined, tags: row.tags, webhookUrl: row.webhookUrl ?? undefined, semantic: row.semantic ?? undefined, federate: row.federate ?? false, createdAt: row.createdAt.toISOString(), updatedAt: row.updatedAt.toISOString() };
|
|
1293
1310
|
}
|
|
1294
1311
|
toWorkRecord(row) {
|
|
1295
1312
|
return { trackingCode: row.trackingCode, status: row.status, actionId: row.actionId, providerGaii: row.providerGaii, requesterGaii: row.requesterGaii, input: row.input, output: row.output, cost: { basePrice: row.costBasePrice, networkFee: row.costNetworkFee, total: row.costTotal, inEscrow: row.costInEscrow }, ttlExpiresAt: row.ttlExpiresAt.toISOString(), callbackUrl: row.callbackUrl ?? undefined, rating: row.ratingScore != null ? { score: row.ratingScore, comment: row.ratingComment ?? undefined } : undefined, createdAt: row.createdAt.toISOString(), updatedAt: row.updatedAt.toISOString() };
|
|
1296
1313
|
}
|
|
1297
1314
|
toBoardRecord(row) {
|
|
1298
|
-
return { id: row.boardId, name: row.name, description: row.description ?? undefined, visibility: row.visibility, ownerGaii: row.ownerGaii, allowedGaiis: row.allowedGaiis, createdAt: row.createdAt.toISOString() };
|
|
1315
|
+
return { id: row.boardId, name: row.name, description: row.description ?? undefined, visibility: row.visibility, ownerGaii: row.ownerGaii, allowedGaiis: row.allowedGaiis, federate: row.federate ?? false, createdAt: row.createdAt.toISOString() };
|
|
1299
1316
|
}
|
|
1300
1317
|
toPostRecord(row) {
|
|
1301
1318
|
return { id: row.postId, boardId: row.boardId, authorGaii: row.authorGaii, title: row.title, body: row.body, category: row.category ?? undefined, tags: row.tags, ttlExpiresAt: row.ttlExpiresAt?.toISOString(), reactions: row.reactions, replyTo: row.replyTo ?? undefined, createdAt: row.createdAt.toISOString() };
|
|
@@ -1828,6 +1845,14 @@ export class MongoStorage {
|
|
|
1828
1845
|
}
|
|
1829
1846
|
return results;
|
|
1830
1847
|
}
|
|
1848
|
+
async expireStaleConsents(before) {
|
|
1849
|
+
this.ensureReady();
|
|
1850
|
+
const result = await this.prisma.consent.updateMany({
|
|
1851
|
+
where: { status: 'active', expires: { not: null, lt: new Date(before) } },
|
|
1852
|
+
data: { status: 'expired' },
|
|
1853
|
+
});
|
|
1854
|
+
return result.count;
|
|
1855
|
+
}
|
|
1831
1856
|
// Consent Audit
|
|
1832
1857
|
async addConsentAuditEntry(entry) {
|
|
1833
1858
|
this.ensureReady();
|
|
@@ -2128,6 +2153,11 @@ export class MongoStorage {
|
|
|
2128
2153
|
const result = await this.prisma.match.deleteMany({ where: { expiresAt: { lt: new Date() }, status: { not: 'accepted' } } });
|
|
2129
2154
|
return result.count;
|
|
2130
2155
|
}
|
|
2156
|
+
async deleteMatchesByProfile(profile) {
|
|
2157
|
+
this.ensureReady();
|
|
2158
|
+
const result = await this.prisma.match.deleteMany({ where: { OR: [{ profileA: profile }, { profileB: profile }] } });
|
|
2159
|
+
return result.count;
|
|
2160
|
+
}
|
|
2131
2161
|
async listAllMatches(limit = 10000) {
|
|
2132
2162
|
this.ensureReady();
|
|
2133
2163
|
const rows = await this.prisma.match.findMany({ take: Math.min(limit, 10000) });
|
|
@@ -3603,6 +3633,11 @@ export class MongoStorage {
|
|
|
3603
3633
|
}
|
|
3604
3634
|
return broken;
|
|
3605
3635
|
}
|
|
3636
|
+
async deleteLinksByContributor(gaii) {
|
|
3637
|
+
this.ensureReady();
|
|
3638
|
+
const result = await this.prisma.knowledgeLink.deleteMany({ where: { linkedBy: gaii } });
|
|
3639
|
+
return result.count;
|
|
3640
|
+
}
|
|
3606
3641
|
// ══════════════════════════════════════════════════════════
|
|
3607
3642
|
// ── Knowledge: Operator Reviews (Prisma-persisted) ──
|
|
3608
3643
|
// ══════════════════════════════════════════════════════════
|
|
@@ -3648,6 +3683,11 @@ export class MongoStorage {
|
|
|
3648
3683
|
});
|
|
3649
3684
|
return rows.map((r) => this.toOperatorReviewRecord(r));
|
|
3650
3685
|
}
|
|
3686
|
+
async deleteReviewsByOperator(gaii) {
|
|
3687
|
+
this.ensureReady();
|
|
3688
|
+
const result = await this.prisma.knowledgeReview.deleteMany({ where: { operatorGaii: gaii } });
|
|
3689
|
+
return result.count;
|
|
3690
|
+
}
|
|
3651
3691
|
// ══════════════════════════════════════════════════════════
|
|
3652
3692
|
// ── Scheduler: Scheduled Jobs ──
|
|
3653
3693
|
// ══════════════════════════════════════════════════════════
|
|
@@ -3915,6 +3955,11 @@ export class MongoStorage {
|
|
|
3915
3955
|
return false;
|
|
3916
3956
|
}
|
|
3917
3957
|
}
|
|
3958
|
+
async deleteExtensionInstancesByOwner(ownerIdentity) {
|
|
3959
|
+
this.ensureReady();
|
|
3960
|
+
const result = await this.prisma.extensionInstance.deleteMany({ where: { createdBy: ownerIdentity } });
|
|
3961
|
+
return result.count;
|
|
3962
|
+
}
|
|
3918
3963
|
// ══════════════════════════════════════════════════════════
|
|
3919
3964
|
// ── Federation Peers (persisted active peer connections) ──
|
|
3920
3965
|
// ══════════════════════════════════════════════════════════
|
|
@@ -3922,8 +3967,8 @@ export class MongoStorage {
|
|
|
3922
3967
|
this.ensureReady();
|
|
3923
3968
|
await this.prisma.federationPeer.upsert({
|
|
3924
3969
|
where: { nodeId: peer.nodeId },
|
|
3925
|
-
create: { nodeId: peer.nodeId, url: peer.url, publicKey: peer.publicKey, status: peer.status, addedAt: new Date(peer.addedAt), lastSeen: new Date(peer.lastSeen) },
|
|
3926
|
-
update: { url: peer.url, publicKey: peer.publicKey, status: peer.status, lastSeen: new Date(peer.lastSeen) },
|
|
3970
|
+
create: { nodeId: peer.nodeId, url: peer.url, publicKey: peer.publicKey, status: peer.status, addedAt: new Date(peer.addedAt), lastSeen: new Date(peer.lastSeen), shareCatalogue: peer.shareCatalogue, replicateMemory: peer.replicateMemory, allowRouting: peer.allowRouting, peerMode: peer.peerMode || 'federation', allowFederatedAuth: peer.allowFederatedAuth ?? false, federationAuthScopes: peer.federationAuthScopes ?? [] },
|
|
3971
|
+
update: { url: peer.url, publicKey: peer.publicKey, status: peer.status, lastSeen: new Date(peer.lastSeen), shareCatalogue: peer.shareCatalogue, replicateMemory: peer.replicateMemory, allowRouting: peer.allowRouting, peerMode: peer.peerMode || 'federation', allowFederatedAuth: peer.allowFederatedAuth ?? false, federationAuthScopes: peer.federationAuthScopes ?? [] },
|
|
3927
3972
|
});
|
|
3928
3973
|
}
|
|
3929
3974
|
async listFederationPeers() {
|
|
@@ -3936,6 +3981,12 @@ export class MongoStorage {
|
|
|
3936
3981
|
status: r.status,
|
|
3937
3982
|
addedAt: r.addedAt instanceof Date ? r.addedAt.toISOString() : r.addedAt,
|
|
3938
3983
|
lastSeen: r.lastSeen instanceof Date ? r.lastSeen.toISOString() : r.lastSeen,
|
|
3984
|
+
shareCatalogue: r.shareCatalogue ?? true,
|
|
3985
|
+
replicateMemory: r.replicateMemory ?? true,
|
|
3986
|
+
allowRouting: r.allowRouting ?? true,
|
|
3987
|
+
peerMode: r.peerMode || 'federation',
|
|
3988
|
+
allowFederatedAuth: r.allowFederatedAuth ?? false,
|
|
3989
|
+
federationAuthScopes: r.federationAuthScopes ?? [],
|
|
3939
3990
|
}));
|
|
3940
3991
|
}
|
|
3941
3992
|
async deleteFederationPeer(nodeId) {
|
|
@@ -4083,6 +4134,11 @@ export class MongoStorage {
|
|
|
4083
4134
|
});
|
|
4084
4135
|
return result.count;
|
|
4085
4136
|
}
|
|
4137
|
+
async deleteDeviceAuthByOwner(ownerName) {
|
|
4138
|
+
this.ensureReady();
|
|
4139
|
+
const result = await this.prisma.deviceAuth.deleteMany({ where: { ownerName } });
|
|
4140
|
+
return result.count;
|
|
4141
|
+
}
|
|
4086
4142
|
toDeviceAuthRecord(row) {
|
|
4087
4143
|
return {
|
|
4088
4144
|
deviceCode: row.deviceCode,
|
|
@@ -5196,6 +5252,50 @@ export class MongoStorage {
|
|
|
5196
5252
|
const trust = { ...cap.trust, vouchCount: Math.max(0, cap.trust.vouchCount - 1) };
|
|
5197
5253
|
await this.prisma.capability.update({ where: { id }, data: { trust: trust } });
|
|
5198
5254
|
}
|
|
5255
|
+
// ── Stats Persistence ──
|
|
5256
|
+
async flushStats(counters) {
|
|
5257
|
+
const ops = Object.entries(counters).map(([key, value]) => this.prisma.statsCounter.upsert({
|
|
5258
|
+
where: { id: key },
|
|
5259
|
+
create: { id: key, value },
|
|
5260
|
+
update: { value },
|
|
5261
|
+
}));
|
|
5262
|
+
await Promise.all(ops);
|
|
5263
|
+
}
|
|
5264
|
+
async loadStats() {
|
|
5265
|
+
const rows = await this.prisma.statsCounter.findMany();
|
|
5266
|
+
const result = {};
|
|
5267
|
+
for (const row of rows) {
|
|
5268
|
+
result[row.id] = row.value;
|
|
5269
|
+
}
|
|
5270
|
+
return result;
|
|
5271
|
+
}
|
|
5272
|
+
async flushDailyHistory(history) {
|
|
5273
|
+
const cutoff = new Date();
|
|
5274
|
+
cutoff.setDate(cutoff.getDate() - 90);
|
|
5275
|
+
const cutoffStr = cutoff.toISOString().split('T')[0];
|
|
5276
|
+
const ops = [];
|
|
5277
|
+
for (const [date, counters] of Object.entries(history)) {
|
|
5278
|
+
for (const [key, value] of Object.entries(counters)) {
|
|
5279
|
+
ops.push(this.prisma.statsDailyHistory.upsert({
|
|
5280
|
+
where: { date_key: { date, key } },
|
|
5281
|
+
create: { date, key, value },
|
|
5282
|
+
update: { value },
|
|
5283
|
+
}));
|
|
5284
|
+
}
|
|
5285
|
+
}
|
|
5286
|
+
ops.push(this.prisma.statsDailyHistory.deleteMany({ where: { date: { lt: cutoffStr } } }));
|
|
5287
|
+
await Promise.all(ops);
|
|
5288
|
+
}
|
|
5289
|
+
async loadDailyHistory() {
|
|
5290
|
+
const rows = await this.prisma.statsDailyHistory.findMany({ orderBy: { date: 'asc' } });
|
|
5291
|
+
const result = {};
|
|
5292
|
+
for (const row of rows) {
|
|
5293
|
+
if (!result[row.date])
|
|
5294
|
+
result[row.date] = {};
|
|
5295
|
+
result[row.date][row.key] = row.value;
|
|
5296
|
+
}
|
|
5297
|
+
return result;
|
|
5298
|
+
}
|
|
5199
5299
|
}
|
|
5200
5300
|
/**
|
|
5201
5301
|
* Wildcard pattern matching: supports '*' (one segment) and '**' (multiple segments)
|