@credo-ts/drpc 0.6.1-pr-2091-20241119140918 → 0.6.2-alpha-20251210145840
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/build/DrpcApi.d.mts +50 -0
- package/build/DrpcApi.d.mts.map +1 -0
- package/build/DrpcApi.mjs +123 -0
- package/build/DrpcApi.mjs.map +1 -0
- package/build/DrpcModule.d.mts +15 -0
- package/build/DrpcModule.d.mts.map +1 -0
- package/build/DrpcModule.mjs +39 -0
- package/build/DrpcModule.mjs.map +1 -0
- package/build/DrpcRequestEvents.d.mts +17 -0
- package/build/DrpcRequestEvents.d.mts.map +1 -0
- package/build/DrpcRequestEvents.mjs +9 -0
- package/build/DrpcRequestEvents.mjs.map +1 -0
- package/build/DrpcResponseEvents.d.mts +17 -0
- package/build/DrpcResponseEvents.d.mts.map +1 -0
- package/build/DrpcResponseEvents.mjs +9 -0
- package/build/DrpcResponseEvents.mjs.map +1 -0
- package/build/_virtual/_@oxc-project_runtime@0.99.0/helpers/decorate.mjs +10 -0
- package/build/_virtual/_@oxc-project_runtime@0.99.0/helpers/decorateMetadata.mjs +7 -0
- package/build/_virtual/_@oxc-project_runtime@0.99.0/helpers/decorateParam.mjs +9 -0
- package/build/handlers/DrpcRequestHandler.mjs +17 -0
- package/build/handlers/DrpcRequestHandler.mjs.map +1 -0
- package/build/handlers/DrpcResponseHandler.mjs +17 -0
- package/build/handlers/DrpcResponseHandler.mjs.map +1 -0
- package/build/handlers/index.mjs +2 -0
- package/build/index.d.mts +15 -0
- package/build/index.mjs +16 -0
- package/build/messages/DrpcRequestMessage.d.mts +22 -0
- package/build/messages/DrpcRequestMessage.d.mts.map +1 -0
- package/build/messages/DrpcRequestMessage.mjs +29 -0
- package/build/messages/DrpcRequestMessage.mjs.map +1 -0
- package/build/messages/DrpcResponseMessage.d.mts +30 -0
- package/build/messages/DrpcResponseMessage.d.mts.map +1 -0
- package/build/messages/DrpcResponseMessage.mjs +30 -0
- package/build/messages/DrpcResponseMessage.mjs.map +1 -0
- package/build/messages/index.d.mts +2 -0
- package/build/messages/index.mjs +2 -0
- package/build/models/DrpcErrorCodes.d.mts +12 -0
- package/build/models/DrpcErrorCodes.d.mts.map +1 -0
- package/build/models/DrpcRole.d.mts +8 -0
- package/build/models/DrpcRole.d.mts.map +1 -0
- package/build/models/DrpcRole.mjs +10 -0
- package/build/models/DrpcRole.mjs.map +1 -0
- package/build/models/DrpcState.d.mts +9 -0
- package/build/models/DrpcState.d.mts.map +1 -0
- package/build/models/DrpcState.mjs +11 -0
- package/build/models/DrpcState.mjs.map +1 -0
- package/build/models/ValidRequest.d.mts +1 -0
- package/build/models/ValidRequest.mjs +28 -0
- package/build/models/ValidRequest.mjs.map +1 -0
- package/build/models/ValidResponse.d.mts +1 -0
- package/build/models/ValidResponse.mjs +38 -0
- package/build/models/ValidResponse.mjs.map +1 -0
- package/build/models/index.d.mts +5 -0
- package/build/models/index.mjs +4 -0
- package/build/repository/DrpcRecord.d.mts +45 -0
- package/build/repository/DrpcRecord.d.mts.map +1 -0
- package/build/repository/DrpcRecord.mjs +38 -0
- package/build/repository/DrpcRecord.mjs.map +1 -0
- package/build/repository/DrpcRepository.d.mts +10 -0
- package/build/repository/DrpcRepository.d.mts.map +1 -0
- package/build/repository/DrpcRepository.mjs +22 -0
- package/build/repository/DrpcRepository.mjs.map +1 -0
- package/build/repository/index.d.mts +2 -0
- package/build/repository/index.mjs +2 -0
- package/build/services/DrpcService.d.mts +42 -0
- package/build/services/DrpcService.d.mts.map +1 -0
- package/build/services/DrpcService.mjs +142 -0
- package/build/services/DrpcService.mjs.map +1 -0
- package/build/services/index.d.mts +1 -0
- package/build/services/index.mjs +1 -0
- package/package.json +16 -15
- package/build/DrpcApi.d.ts +0 -42
- package/build/DrpcApi.js +0 -135
- package/build/DrpcApi.js.map +0 -1
- package/build/DrpcModule.d.ts +0 -9
- package/build/DrpcModule.js +0 -33
- package/build/DrpcModule.js.map +0 -1
- package/build/DrpcRequestEvents.d.ts +0 -11
- package/build/DrpcRequestEvents.js +0 -8
- package/build/DrpcRequestEvents.js.map +0 -1
- package/build/DrpcResponseEvents.d.ts +0 -11
- package/build/DrpcResponseEvents.js +0 -8
- package/build/DrpcResponseEvents.js.map +0 -1
- package/build/handlers/DrpcRequestHandler.d.ts +0 -9
- package/build/handlers/DrpcRequestHandler.js +0 -15
- package/build/handlers/DrpcRequestHandler.js.map +0 -1
- package/build/handlers/DrpcResponseHandler.d.ts +0 -9
- package/build/handlers/DrpcResponseHandler.js +0 -15
- package/build/handlers/DrpcResponseHandler.js.map +0 -1
- package/build/handlers/index.d.ts +0 -2
- package/build/handlers/index.js +0 -19
- package/build/handlers/index.js.map +0 -1
- package/build/index.d.ts +0 -8
- package/build/index.js +0 -25
- package/build/index.js.map +0 -1
- package/build/messages/DrpcRequestMessage.d.ts +0 -16
- package/build/messages/DrpcRequestMessage.js +0 -37
- package/build/messages/DrpcRequestMessage.js.map +0 -1
- package/build/messages/DrpcResponseMessage.d.ts +0 -23
- package/build/messages/DrpcResponseMessage.js +0 -38
- package/build/messages/DrpcResponseMessage.js.map +0 -1
- package/build/messages/index.d.ts +0 -2
- package/build/messages/index.js +0 -19
- package/build/messages/index.js.map +0 -1
- package/build/models/DrpcErrorCodes.d.ts +0 -8
- package/build/models/DrpcErrorCodes.js +0 -13
- package/build/models/DrpcErrorCodes.js.map +0 -1
- package/build/models/DrpcRole.d.ts +0 -4
- package/build/models/DrpcRole.js +0 -9
- package/build/models/DrpcRole.js.map +0 -1
- package/build/models/DrpcState.d.ts +0 -5
- package/build/models/DrpcState.js +0 -10
- package/build/models/DrpcState.js.map +0 -1
- package/build/models/ValidRequest.d.ts +0 -3
- package/build/models/ValidRequest.js +0 -39
- package/build/models/ValidRequest.js.map +0 -1
- package/build/models/ValidResponse.d.ts +0 -3
- package/build/models/ValidResponse.js +0 -61
- package/build/models/ValidResponse.js.map +0 -1
- package/build/models/index.d.ts +0 -5
- package/build/models/index.js +0 -22
- package/build/models/index.js.map +0 -1
- package/build/repository/DrpcRecord.d.ts +0 -37
- package/build/repository/DrpcRecord.js +0 -40
- package/build/repository/DrpcRecord.js.map +0 -1
- package/build/repository/DrpcRepository.d.ts +0 -5
- package/build/repository/DrpcRepository.js +0 -29
- package/build/repository/DrpcRepository.js.map +0 -1
- package/build/repository/index.d.ts +0 -2
- package/build/repository/index.js +0 -19
- package/build/repository/index.js.map +0 -1
- package/build/services/DrpcService.d.ts +0 -34
- package/build/services/DrpcService.js +0 -150
- package/build/services/DrpcService.js.map +0 -1
- package/build/services/index.d.ts +0 -1
- package/build/services/index.js +0 -18
- package/build/services/index.js.map +0 -1
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//#region src/models/DrpcRole.ts
|
|
2
|
+
let DrpcRole = /* @__PURE__ */ function(DrpcRole$1) {
|
|
3
|
+
DrpcRole$1["Client"] = "client";
|
|
4
|
+
DrpcRole$1["Server"] = "server";
|
|
5
|
+
return DrpcRole$1;
|
|
6
|
+
}({});
|
|
7
|
+
|
|
8
|
+
//#endregion
|
|
9
|
+
export { DrpcRole };
|
|
10
|
+
//# sourceMappingURL=DrpcRole.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DrpcRole.mjs","names":[],"sources":["../../src/models/DrpcRole.ts"],"sourcesContent":["export enum DrpcRole {\n Client = 'client',\n Server = 'server',\n}\n"],"mappings":";AAAA,IAAY,gDAAL;AACL;AACA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DrpcState.d.mts","names":[],"sources":["../../src/models/DrpcState.ts"],"sourcesContent":[],"mappings":";aAAY,SAAA;EAAA,WAAA,GAAS,cAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
//#region src/models/DrpcState.ts
|
|
2
|
+
let DrpcState = /* @__PURE__ */ function(DrpcState$1) {
|
|
3
|
+
DrpcState$1["RequestSent"] = "request-sent";
|
|
4
|
+
DrpcState$1["RequestReceived"] = "request-received";
|
|
5
|
+
DrpcState$1["Completed"] = "completed";
|
|
6
|
+
return DrpcState$1;
|
|
7
|
+
}({});
|
|
8
|
+
|
|
9
|
+
//#endregion
|
|
10
|
+
export { DrpcState };
|
|
11
|
+
//# sourceMappingURL=DrpcState.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DrpcState.mjs","names":[],"sources":["../../src/models/DrpcState.ts"],"sourcesContent":["export enum DrpcState {\n RequestSent = 'request-sent',\n RequestReceived = 'request-received',\n Completed = 'completed',\n}\n"],"mappings":";AAAA,IAAY,kDAAL;AACL;AACA;AACA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "class-validator";
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ValidateBy, ValidationError, buildMessage } from "class-validator";
|
|
2
|
+
|
|
3
|
+
//#region src/models/ValidRequest.ts
|
|
4
|
+
function IsValidDrpcRequest(validationOptions) {
|
|
5
|
+
return (target, propertyKey) => {
|
|
6
|
+
ValidateBy({
|
|
7
|
+
name: "isValidDrpcRequest",
|
|
8
|
+
validator: {
|
|
9
|
+
validate: (value) => {
|
|
10
|
+
let isValid = false;
|
|
11
|
+
if (!Array.isArray(value)) isValid = isValidDrpcRequest(value);
|
|
12
|
+
else isValid = value.every(isValidDrpcRequest);
|
|
13
|
+
if (!isValid) throw new ValidationError();
|
|
14
|
+
return isValid;
|
|
15
|
+
},
|
|
16
|
+
defaultMessage: buildMessage((eachPrefix) => `${eachPrefix}$property is not a valid DrpcRequest`, validationOptions)
|
|
17
|
+
}
|
|
18
|
+
}, validationOptions)(target, propertyKey);
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function isValidDrpcRequest(value) {
|
|
22
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
|
|
23
|
+
return "jsonrpc" in value && "method" in value && "id" in value;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
//#endregion
|
|
27
|
+
export { IsValidDrpcRequest, isValidDrpcRequest };
|
|
28
|
+
//# sourceMappingURL=ValidRequest.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValidRequest.mjs","names":[],"sources":["../../src/models/ValidRequest.ts"],"sourcesContent":["import type { ValidationOptions } from 'class-validator'\n\nimport { buildMessage, ValidateBy, ValidationError } from 'class-validator'\n\nexport function IsValidDrpcRequest(validationOptions?: ValidationOptions): PropertyDecorator {\n // biome-ignore lint/suspicious/noExplicitAny: no explanation\n return (target: any, propertyKey: string | symbol) => {\n ValidateBy(\n {\n name: 'isValidDrpcRequest',\n validator: {\n // biome-ignore lint/suspicious/noExplicitAny: no explanation\n validate: (value: any): boolean => {\n // Check if value is a DrpcRequestObject or an array of DrpcRequestObject\n let isValid = false\n if (!Array.isArray(value)) {\n isValid = isValidDrpcRequest(value)\n } else {\n isValid = value.every(isValidDrpcRequest)\n }\n\n if (!isValid) {\n throw new ValidationError()\n }\n\n return isValid\n },\n defaultMessage: buildMessage(\n (eachPrefix) => `${eachPrefix}$property is not a valid DrpcRequest`,\n validationOptions\n ),\n },\n },\n validationOptions\n )(target, propertyKey)\n }\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: no explanation\nexport function isValidDrpcRequest(value: any): boolean {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n return false\n }\n return 'jsonrpc' in value && 'method' in value && 'id' in value\n}\n"],"mappings":";;;AAIA,SAAgB,mBAAmB,mBAA0D;AAE3F,SAAQ,QAAa,gBAAiC;AACpD,aACE;GACE,MAAM;GACN,WAAW;IAET,WAAW,UAAwB;KAEjC,IAAI,UAAU;AACd,SAAI,CAAC,MAAM,QAAQ,MAAM,CACvB,WAAU,mBAAmB,MAAM;SAEnC,WAAU,MAAM,MAAM,mBAAmB;AAG3C,SAAI,CAAC,QACH,OAAM,IAAI,iBAAiB;AAG7B,YAAO;;IAET,gBAAgB,cACb,eAAe,GAAG,WAAW,uCAC9B,kBACD;IACF;GACF,EACD,kBACD,CAAC,QAAQ,YAAY;;;AAK1B,SAAgB,mBAAmB,OAAqB;AACtD,KAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,MAAM,CACrE,QAAO;AAET,QAAO,aAAa,SAAS,YAAY,SAAS,QAAQ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "class-validator";
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { ValidateBy, ValidationError, buildMessage } from "class-validator";
|
|
2
|
+
|
|
3
|
+
//#region src/models/ValidResponse.ts
|
|
4
|
+
function IsValidDrpcResponse(validationOptions) {
|
|
5
|
+
return (target, propertyKey) => {
|
|
6
|
+
ValidateBy({
|
|
7
|
+
name: "isValidDrpcResponse",
|
|
8
|
+
validator: {
|
|
9
|
+
validate: (value) => {
|
|
10
|
+
let isValid = false;
|
|
11
|
+
if (Array.isArray(value)) {
|
|
12
|
+
if (value.length > 0) isValid = value.every(isValidDrpcResponse);
|
|
13
|
+
} else isValid = isValidDrpcResponse(value);
|
|
14
|
+
if (!isValid) throw new ValidationError();
|
|
15
|
+
return isValid;
|
|
16
|
+
},
|
|
17
|
+
defaultMessage: buildMessage((eachPrefix) => `${eachPrefix}$property is not a valid DrpcResponse`, validationOptions)
|
|
18
|
+
}
|
|
19
|
+
}, validationOptions)(target, propertyKey);
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function isValidDrpcResponse(value) {
|
|
23
|
+
if (typeof value !== "object" || value === null) return false;
|
|
24
|
+
if (Object.keys(value).length === 0) return true;
|
|
25
|
+
if ("jsonrpc" in value && "id" in value) {
|
|
26
|
+
if ("result" in value && typeof value.result === "undefined") return false;
|
|
27
|
+
if ("error" in value && !isValidDrpcResponseError(value.error)) return false;
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
function isValidDrpcResponseError(error) {
|
|
33
|
+
return typeof error === "object" && error !== null && "code" in error && "message" in error;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
//#endregion
|
|
37
|
+
export { IsValidDrpcResponse, isValidDrpcResponse };
|
|
38
|
+
//# sourceMappingURL=ValidResponse.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValidResponse.mjs","names":[],"sources":["../../src/models/ValidResponse.ts"],"sourcesContent":["import type { ValidationOptions } from 'class-validator'\n\nimport { buildMessage, ValidateBy, ValidationError } from 'class-validator'\n\nexport function IsValidDrpcResponse(validationOptions?: ValidationOptions): PropertyDecorator {\n // biome-ignore lint/suspicious/noExplicitAny: no explanation\n return (target: any, propertyKey: string | symbol) => {\n ValidateBy(\n {\n name: 'isValidDrpcResponse',\n validator: {\n // biome-ignore lint/suspicious/noExplicitAny: no explanation\n validate: (value: any): boolean => {\n // Check if value is a valid DrpcResponseObject, an array of DrpcResponseObject (possibly mixed with empty objects), or an empty object\n let isValid = false\n if (Array.isArray(value)) {\n if (value.length > 0) {\n isValid = value.every(isValidDrpcResponse)\n }\n } else {\n isValid = isValidDrpcResponse(value)\n }\n if (!isValid) {\n throw new ValidationError()\n }\n return isValid\n },\n defaultMessage: buildMessage(\n (eachPrefix) => `${eachPrefix}$property is not a valid DrpcResponse`,\n validationOptions\n ),\n },\n },\n validationOptions\n )(target, propertyKey)\n }\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: no explanation\nexport function isValidDrpcResponse(value: any): boolean {\n // Check if value is an object\n if (typeof value !== 'object' || value === null) {\n return false\n }\n\n // Check if it's an empty object\n if (Object.keys(value).length === 0) {\n return true\n }\n\n // Check if it's a valid DrpcResponseObject\n if ('jsonrpc' in value && 'id' in value) {\n // Check if 'result' and 'error' are valid\n if ('result' in value && typeof value.result === 'undefined') {\n return false\n }\n if ('error' in value && !isValidDrpcResponseError(value.error)) {\n return false\n }\n return true\n }\n\n return false\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: no explanation\nfunction isValidDrpcResponseError(error: any): boolean {\n return typeof error === 'object' && error !== null && 'code' in error && 'message' in error\n}\n"],"mappings":";;;AAIA,SAAgB,oBAAoB,mBAA0D;AAE5F,SAAQ,QAAa,gBAAiC;AACpD,aACE;GACE,MAAM;GACN,WAAW;IAET,WAAW,UAAwB;KAEjC,IAAI,UAAU;AACd,SAAI,MAAM,QAAQ,MAAM,EACtB;UAAI,MAAM,SAAS,EACjB,WAAU,MAAM,MAAM,oBAAoB;WAG5C,WAAU,oBAAoB,MAAM;AAEtC,SAAI,CAAC,QACH,OAAM,IAAI,iBAAiB;AAE7B,YAAO;;IAET,gBAAgB,cACb,eAAe,GAAG,WAAW,wCAC9B,kBACD;IACF;GACF,EACD,kBACD,CAAC,QAAQ,YAAY;;;AAK1B,SAAgB,oBAAoB,OAAqB;AAEvD,KAAI,OAAO,UAAU,YAAY,UAAU,KACzC,QAAO;AAIT,KAAI,OAAO,KAAK,MAAM,CAAC,WAAW,EAChC,QAAO;AAIT,KAAI,aAAa,SAAS,QAAQ,OAAO;AAEvC,MAAI,YAAY,SAAS,OAAO,MAAM,WAAW,YAC/C,QAAO;AAET,MAAI,WAAW,SAAS,CAAC,yBAAyB,MAAM,MAAM,CAC5D,QAAO;AAET,SAAO;;AAGT,QAAO;;AAIT,SAAS,yBAAyB,OAAqB;AACrD,QAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,UAAU,SAAS,aAAa"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { DrpcRequest } from "../messages/DrpcRequestMessage.mjs";
|
|
2
|
+
import { DrpcRole } from "../models/DrpcRole.mjs";
|
|
3
|
+
import { DrpcState } from "../models/DrpcState.mjs";
|
|
4
|
+
import "../models/index.mjs";
|
|
5
|
+
import { DrpcResponse } from "../messages/DrpcResponseMessage.mjs";
|
|
6
|
+
import "../messages/index.mjs";
|
|
7
|
+
import { BaseRecord, RecordTags, TagsBase } from "@credo-ts/core";
|
|
8
|
+
|
|
9
|
+
//#region src/repository/DrpcRecord.d.ts
|
|
10
|
+
type CustomDrpcMessageTags = TagsBase;
|
|
11
|
+
type DefaultDrpcMessageTags = {
|
|
12
|
+
connectionId: string;
|
|
13
|
+
threadId: string;
|
|
14
|
+
};
|
|
15
|
+
type DrpcMessageTags = RecordTags<DrpcRecord>;
|
|
16
|
+
interface DrpcStorageProps {
|
|
17
|
+
id?: string;
|
|
18
|
+
connectionId: string;
|
|
19
|
+
role: DrpcRole;
|
|
20
|
+
tags?: CustomDrpcMessageTags;
|
|
21
|
+
request?: DrpcRequest;
|
|
22
|
+
response?: DrpcResponse;
|
|
23
|
+
state: DrpcState;
|
|
24
|
+
threadId: string;
|
|
25
|
+
}
|
|
26
|
+
declare class DrpcRecord extends BaseRecord<DefaultDrpcMessageTags, CustomDrpcMessageTags> {
|
|
27
|
+
request?: DrpcRequest;
|
|
28
|
+
response?: DrpcResponse;
|
|
29
|
+
connectionId: string;
|
|
30
|
+
role: DrpcRole;
|
|
31
|
+
state: DrpcState;
|
|
32
|
+
threadId: string;
|
|
33
|
+
static readonly type = "DrpcRecord";
|
|
34
|
+
readonly type = "DrpcRecord";
|
|
35
|
+
constructor(props: DrpcStorageProps);
|
|
36
|
+
getTags(): {
|
|
37
|
+
connectionId: string;
|
|
38
|
+
threadId: string;
|
|
39
|
+
};
|
|
40
|
+
assertRole(expectedRole: DrpcRole): void;
|
|
41
|
+
assertState(expectedStates: DrpcState | DrpcState[]): void;
|
|
42
|
+
}
|
|
43
|
+
//#endregion
|
|
44
|
+
export { CustomDrpcMessageTags, DefaultDrpcMessageTags, DrpcMessageTags, DrpcRecord, DrpcStorageProps };
|
|
45
|
+
//# sourceMappingURL=DrpcRecord.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DrpcRecord.d.mts","names":[],"sources":["../../src/repository/DrpcRecord.ts"],"sourcesContent":[],"mappings":";;;;;;;;;KAKY,qBAAA,GAAwB;KACxB,sBAAA;;;;AADA,KAMA,eAAA,GAAkB,UANM,CAMK,UANG,CAAA;AAChC,UAOK,gBAAA,CAPiB;EAKtB,EAAA,CAAA,EAAA,MAAA;EAEK,YAAA,EAAA,MAAgB;EAGzB,IAAA,EAAA,QAAA;EACC,IAAA,CAAA,EAAA,qBAAA;EACG,OAAA,CAAA,EAAA,WAAA;EACC,QAAA,CAAA,EAAA,YAAA;EACJ,KAAA,EAAA,SAAA;EAAS,QAAA,EAAA,MAAA;AAIlB;AAA2C,cAA9B,UAAA,SAAmB,UAAW,CAAA,sBAAA,EAAwB,qBAAxB,CAAA,CAAA;EAAwB,OAAA,CAAA,EAChD,WADgD;EAChD,QAAA,CAAA,EACC,YADD;EACC,YAAA,EAAA,MAAA;EAEJ,IAAA,EAAA,QAAA;EACC,KAAA,EAAA,SAAA;EAMW,QAAA,EAAA,MAAA;EAuBM,gBAAA,IAAA,GAAA,YAAA;EAMG,SAAA,IAAA,GAAA,YAAA;EAAY,WAAA,CAAA,KAAA,EA7BrB,gBA6BqB;EAxCjB,OAAA,CAAA,CAAA,EAAA;IAAU,YAAA,EAAA,MAAA;;;2BAkCR;8BAMG,YAAY"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { BaseRecord, CredoError, utils } from "@credo-ts/core";
|
|
2
|
+
|
|
3
|
+
//#region src/repository/DrpcRecord.ts
|
|
4
|
+
var DrpcRecord = class DrpcRecord extends BaseRecord {
|
|
5
|
+
constructor(props) {
|
|
6
|
+
super();
|
|
7
|
+
this.type = DrpcRecord.type;
|
|
8
|
+
if (props) {
|
|
9
|
+
this.id = props.id ?? utils.uuid();
|
|
10
|
+
this.request = props.request;
|
|
11
|
+
this.response = props.response;
|
|
12
|
+
this.connectionId = props.connectionId;
|
|
13
|
+
this._tags = props.tags ?? {};
|
|
14
|
+
this.role = props.role;
|
|
15
|
+
this.state = props.state;
|
|
16
|
+
this.threadId = props.threadId;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
getTags() {
|
|
20
|
+
return {
|
|
21
|
+
...this._tags,
|
|
22
|
+
connectionId: this.connectionId,
|
|
23
|
+
threadId: this.threadId
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
assertRole(expectedRole) {
|
|
27
|
+
if (this.role !== expectedRole) throw new CredoError(`Invalid DRPC record role ${this.role}, expected is ${expectedRole}.`);
|
|
28
|
+
}
|
|
29
|
+
assertState(expectedStates) {
|
|
30
|
+
if (!Array.isArray(expectedStates)) expectedStates = [expectedStates];
|
|
31
|
+
if (!expectedStates.includes(this.state)) throw new CredoError(`DRPC response record is in invalid state ${this.state}. Valid states are: ${expectedStates.join(", ")}.`);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
DrpcRecord.type = "DrpcRecord";
|
|
35
|
+
|
|
36
|
+
//#endregion
|
|
37
|
+
export { DrpcRecord };
|
|
38
|
+
//# sourceMappingURL=DrpcRecord.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DrpcRecord.mjs","names":[],"sources":["../../src/repository/DrpcRecord.ts"],"sourcesContent":["import type { RecordTags, TagsBase } from '@credo-ts/core'\nimport { BaseRecord, CredoError, utils } from '@credo-ts/core'\nimport type { DrpcRequest, DrpcResponse } from '../messages'\nimport type { DrpcRole, DrpcState } from '../models'\n\nexport type CustomDrpcMessageTags = TagsBase\nexport type DefaultDrpcMessageTags = {\n connectionId: string\n threadId: string\n}\n\nexport type DrpcMessageTags = RecordTags<DrpcRecord>\n\nexport interface DrpcStorageProps {\n id?: string\n connectionId: string\n role: DrpcRole\n tags?: CustomDrpcMessageTags\n request?: DrpcRequest\n response?: DrpcResponse\n state: DrpcState\n threadId: string\n}\n\nexport class DrpcRecord extends BaseRecord<DefaultDrpcMessageTags, CustomDrpcMessageTags> {\n public request?: DrpcRequest\n public response?: DrpcResponse\n public connectionId!: string\n public role!: DrpcRole\n public state!: DrpcState\n public threadId!: string\n\n public static readonly type = 'DrpcRecord'\n public readonly type = DrpcRecord.type\n\n public constructor(props: DrpcStorageProps) {\n super()\n\n if (props) {\n this.id = props.id ?? utils.uuid()\n this.request = props.request\n this.response = props.response\n this.connectionId = props.connectionId\n this._tags = props.tags ?? {}\n this.role = props.role\n this.state = props.state\n this.threadId = props.threadId\n }\n }\n\n public getTags() {\n return {\n ...this._tags,\n connectionId: this.connectionId,\n threadId: this.threadId,\n }\n }\n\n public assertRole(expectedRole: DrpcRole) {\n if (this.role !== expectedRole) {\n throw new CredoError(`Invalid DRPC record role ${this.role}, expected is ${expectedRole}.`)\n }\n }\n\n public assertState(expectedStates: DrpcState | DrpcState[]) {\n if (!Array.isArray(expectedStates)) {\n expectedStates = [expectedStates]\n }\n\n if (!expectedStates.includes(this.state)) {\n throw new CredoError(\n `DRPC response record is in invalid state ${this.state}. Valid states are: ${expectedStates.join(', ')}.`\n )\n }\n }\n}\n"],"mappings":";;;AAwBA,IAAa,aAAb,MAAa,mBAAmB,WAA0D;CAWxF,AAAO,YAAY,OAAyB;AAC1C,SAAO;OAHO,OAAO,WAAW;AAKhC,MAAI,OAAO;AACT,QAAK,KAAK,MAAM,MAAM,MAAM,MAAM;AAClC,QAAK,UAAU,MAAM;AACrB,QAAK,WAAW,MAAM;AACtB,QAAK,eAAe,MAAM;AAC1B,QAAK,QAAQ,MAAM,QAAQ,EAAE;AAC7B,QAAK,OAAO,MAAM;AAClB,QAAK,QAAQ,MAAM;AACnB,QAAK,WAAW,MAAM;;;CAI1B,AAAO,UAAU;AACf,SAAO;GACL,GAAG,KAAK;GACR,cAAc,KAAK;GACnB,UAAU,KAAK;GAChB;;CAGH,AAAO,WAAW,cAAwB;AACxC,MAAI,KAAK,SAAS,aAChB,OAAM,IAAI,WAAW,4BAA4B,KAAK,KAAK,gBAAgB,aAAa,GAAG;;CAI/F,AAAO,YAAY,gBAAyC;AAC1D,MAAI,CAAC,MAAM,QAAQ,eAAe,CAChC,kBAAiB,CAAC,eAAe;AAGnC,MAAI,CAAC,eAAe,SAAS,KAAK,MAAM,CACtC,OAAM,IAAI,WACR,4CAA4C,KAAK,MAAM,sBAAsB,eAAe,KAAK,KAAK,CAAC,GACxG;;;WAxCkB,OAAO"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { DrpcRecord } from "./DrpcRecord.mjs";
|
|
2
|
+
import { EventEmitter, Repository, StorageService } from "@credo-ts/core";
|
|
3
|
+
|
|
4
|
+
//#region src/repository/DrpcRepository.d.ts
|
|
5
|
+
declare class DrpcRepository extends Repository<DrpcRecord> {
|
|
6
|
+
constructor(storageService: StorageService<DrpcRecord>, eventEmitter: EventEmitter);
|
|
7
|
+
}
|
|
8
|
+
//#endregion
|
|
9
|
+
export { DrpcRepository };
|
|
10
|
+
//# sourceMappingURL=DrpcRepository.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DrpcRepository.d.mts","names":[],"sources":["../../src/repository/DrpcRepository.ts"],"sourcesContent":[],"mappings":";;;;cAKa,cAAA,SAAuB,WAAW;8BAEc,eAAe,2BAC1D;AAJlB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { __decorateMetadata } from "../_virtual/_@oxc-project_runtime@0.99.0/helpers/decorateMetadata.mjs";
|
|
2
|
+
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.99.0/helpers/decorate.mjs";
|
|
3
|
+
import { DrpcRecord } from "./DrpcRecord.mjs";
|
|
4
|
+
import { __decorateParam } from "../_virtual/_@oxc-project_runtime@0.99.0/helpers/decorateParam.mjs";
|
|
5
|
+
import { EventEmitter, InjectionSymbols, Repository, inject, injectable } from "@credo-ts/core";
|
|
6
|
+
|
|
7
|
+
//#region src/repository/DrpcRepository.ts
|
|
8
|
+
var _ref;
|
|
9
|
+
let DrpcRepository = class DrpcRepository$1 extends Repository {
|
|
10
|
+
constructor(storageService, eventEmitter) {
|
|
11
|
+
super(DrpcRecord, storageService, eventEmitter);
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
DrpcRepository = __decorate([
|
|
15
|
+
injectable(),
|
|
16
|
+
__decorateParam(0, inject(InjectionSymbols.StorageService)),
|
|
17
|
+
__decorateMetadata("design:paramtypes", [Object, typeof (_ref = typeof EventEmitter !== "undefined" && EventEmitter) === "function" ? _ref : Object])
|
|
18
|
+
], DrpcRepository);
|
|
19
|
+
|
|
20
|
+
//#endregion
|
|
21
|
+
export { DrpcRepository };
|
|
22
|
+
//# sourceMappingURL=DrpcRepository.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DrpcRepository.mjs","names":["DrpcRepository","storageService: StorageService<DrpcRecord>"],"sources":["../../src/repository/DrpcRepository.ts"],"sourcesContent":["import { EventEmitter, InjectionSymbols, inject, injectable, Repository, type StorageService } from '@credo-ts/core'\n\nimport { DrpcRecord } from './DrpcRecord'\n\n@injectable()\nexport class DrpcRepository extends Repository<DrpcRecord> {\n public constructor(\n @inject(InjectionSymbols.StorageService) storageService: StorageService<DrpcRecord>,\n eventEmitter: EventEmitter\n ) {\n super(DrpcRecord, storageService, eventEmitter)\n }\n}\n"],"mappings":";;;;;;;;AAKO,2BAAMA,yBAAuB,WAAuB;CACzD,AAAO,YACL,AAAyCC,gBACzC,cACA;AACA,QAAM,YAAY,gBAAgB,aAAa;;;;CANlD,YAAY;oBAGR,OAAO,iBAAiB,eAAe"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { DrpcRequest, DrpcRequestMessage } from "../messages/DrpcRequestMessage.mjs";
|
|
2
|
+
import { DrpcResponse, DrpcResponseMessage } from "../messages/DrpcResponseMessage.mjs";
|
|
3
|
+
import "../messages/index.mjs";
|
|
4
|
+
import { DrpcRecord } from "../repository/DrpcRecord.mjs";
|
|
5
|
+
import { DrpcRepository } from "../repository/DrpcRepository.mjs";
|
|
6
|
+
import "../repository/index.mjs";
|
|
7
|
+
import { AgentContext, EventEmitter, Query, QueryOptions } from "@credo-ts/core";
|
|
8
|
+
import { DidCommInboundMessageContext } from "@credo-ts/didcomm";
|
|
9
|
+
|
|
10
|
+
//#region src/services/DrpcService.d.ts
|
|
11
|
+
declare class DrpcService {
|
|
12
|
+
private drpcMessageRepository;
|
|
13
|
+
private eventEmitter;
|
|
14
|
+
constructor(drpcMessageRepository: DrpcRepository, eventEmitter: EventEmitter);
|
|
15
|
+
createRequestMessage(agentContext: AgentContext, request: DrpcRequest, connectionId: string): Promise<{
|
|
16
|
+
requestMessage: DrpcRequestMessage;
|
|
17
|
+
record: DrpcRecord;
|
|
18
|
+
}>;
|
|
19
|
+
createResponseMessage(agentContext: AgentContext, response: DrpcResponse, drpcRecord: DrpcRecord): Promise<{
|
|
20
|
+
responseMessage: DrpcResponseMessage;
|
|
21
|
+
record: DrpcRecord;
|
|
22
|
+
}>;
|
|
23
|
+
createRequestListener(callback: (params: {
|
|
24
|
+
drpcMessageRecord: DrpcRecord;
|
|
25
|
+
removeListener: () => void;
|
|
26
|
+
}) => void | Promise<void>): () => void;
|
|
27
|
+
createResponseListener(callback: (params: {
|
|
28
|
+
drpcMessageRecord: DrpcRecord;
|
|
29
|
+
removeListener: () => void;
|
|
30
|
+
}) => void | Promise<void>): () => void;
|
|
31
|
+
receiveResponse(messageContext: DidCommInboundMessageContext<DrpcResponseMessage>): Promise<DrpcRecord>;
|
|
32
|
+
receiveRequest(messageContext: DidCommInboundMessageContext<DrpcRequestMessage>): Promise<DrpcRecord>;
|
|
33
|
+
private emitStateChangedEvent;
|
|
34
|
+
private updateState;
|
|
35
|
+
findByThreadAndConnectionId(agentContext: AgentContext, connectionId: string, threadId: string): Promise<DrpcRecord | null>;
|
|
36
|
+
findAllByQuery(agentContext: AgentContext, query: Query<DrpcRecord>, queryOptions?: QueryOptions): Promise<DrpcRecord[]>;
|
|
37
|
+
getById(agentContext: AgentContext, drpcMessageRecordId: string): Promise<DrpcRecord>;
|
|
38
|
+
deleteById(agentContext: AgentContext, drpcMessageRecordId: string): Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
//#endregion
|
|
41
|
+
export { DrpcService };
|
|
42
|
+
//# sourceMappingURL=DrpcService.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DrpcService.d.mts","names":[],"sources":["../../src/services/DrpcService.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;cAaa,WAAA;;;qCAI+B,8BAA8B;EAJ7D,oBAAW,CAAA,YAAA,EAS0B,YAT1B,EAAA,OAAA,EASiD,WATjD,EAAA,YAAA,EAAA,MAAA,CAAA,EASkF,OATlF,CAAA;IAIoB,cAAA,oBAAA;IAA8B,MAAA,YAAA;EAKxB,CAAA,CAAA;EAAuB,qBAAA,CAAA,YAAA,EAiBtB,YAjBsB,EAAA,QAAA,EAiBE,YAjBF,EAAA,UAAA,EAiB4B,UAjB5B,CAAA,EAiBsC,OAjBtC,CAAA;;;EAAiC,CAAA,CAAA;EAiBvD,qBAAA,CAAA,QAAA,EAAA,CAAA,MAAA,EAAA;IAAwB,iBAAA,EAc/B,UAd+B;IAA0B,cAAA,EAAA,GAAA,GAAA,IAAA;eAcL;;IAde,iBAAA,EA+BnE,UA/BmE;IAcnE,cAAA,EAAA,GAAA,GAAA,IAAA;EAAoD,CAAA,EAAA,GAAA,IAAA,GAiBA,OAjBA,CAAA,IAAA,CAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EAiBpD,eAAA,CAAA,cAAA,EAeG,4BAfH,CAegC,mBAfhC,CAAA,CAAA,EAeoD,OAfpD,CAeoD,UAfpD,CAAA;EAAoD,cAAA,CAAA,cAAA,EAoClD,4BApCkD,CAoCrB,kBApCqB,CAAA,CAAA,EAoCF,OApCE,CAoCF,UApCE,CAAA;EAepB,QAAA,qBAAA;EAA7B,QAAA,WAAA;EAAiD,2BAAA,CAAA,YAAA,EA+E9E,YA/E8E,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAkF3F,OAlF2F,CAkFnF,UAlFmF,GAAA,IAAA,CAAA;EAAA,cAAA,CAAA,YAAA,EAyFpD,YAzFoD,EAAA,KAAA,EAyF/B,KAzF+B,CAyFzB,UAzFyB,CAAA,EAAA,YAAA,CAAA,EAyFG,YAzFH,CAAA,EAyFe,OAzFf,CAyFe,UAzFf,EAAA,CAAA;EAqBrB,OAAA,CAAA,YAAA,EAwEtC,YAxEsC,EAAA,mBAAA,EAAA,MAAA,CAAA,EAwEG,OAxEH,CAwEG,UAxEH,CAAA;EAA7B,UAAA,CAAA,YAAA,EA4EN,YA5EM,EAAA,mBAAA,EAAA,MAAA,CAAA,EA4EmC,OA5EnC,CAAA,IAAA,CAAA"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { DrpcRole } from "../models/DrpcRole.mjs";
|
|
2
|
+
import { DrpcState } from "../models/DrpcState.mjs";
|
|
3
|
+
import { isValidDrpcRequest } from "../models/ValidRequest.mjs";
|
|
4
|
+
import { isValidDrpcResponse } from "../models/ValidResponse.mjs";
|
|
5
|
+
import "../models/index.mjs";
|
|
6
|
+
import { DrpcRequestEventTypes } from "../DrpcRequestEvents.mjs";
|
|
7
|
+
import { DrpcResponseEventTypes } from "../DrpcResponseEvents.mjs";
|
|
8
|
+
import { __decorateMetadata } from "../_virtual/_@oxc-project_runtime@0.99.0/helpers/decorateMetadata.mjs";
|
|
9
|
+
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.99.0/helpers/decorate.mjs";
|
|
10
|
+
import { DrpcRequestMessage } from "../messages/DrpcRequestMessage.mjs";
|
|
11
|
+
import { DrpcResponseMessage } from "../messages/DrpcResponseMessage.mjs";
|
|
12
|
+
import "../messages/index.mjs";
|
|
13
|
+
import { DrpcRecord } from "../repository/DrpcRecord.mjs";
|
|
14
|
+
import { DrpcRepository } from "../repository/DrpcRepository.mjs";
|
|
15
|
+
import "../repository/index.mjs";
|
|
16
|
+
import { EventEmitter, injectable } from "@credo-ts/core";
|
|
17
|
+
|
|
18
|
+
//#region src/services/DrpcService.ts
|
|
19
|
+
var _ref, _ref2;
|
|
20
|
+
let DrpcService = class DrpcService$1 {
|
|
21
|
+
constructor(drpcMessageRepository, eventEmitter) {
|
|
22
|
+
this.drpcMessageRepository = drpcMessageRepository;
|
|
23
|
+
this.eventEmitter = eventEmitter;
|
|
24
|
+
}
|
|
25
|
+
async createRequestMessage(agentContext, request, connectionId) {
|
|
26
|
+
const drpcMessage = new DrpcRequestMessage({ request });
|
|
27
|
+
const drpcMessageRecord = new DrpcRecord({
|
|
28
|
+
request,
|
|
29
|
+
connectionId,
|
|
30
|
+
state: DrpcState.RequestSent,
|
|
31
|
+
threadId: drpcMessage.threadId,
|
|
32
|
+
role: DrpcRole.Client
|
|
33
|
+
});
|
|
34
|
+
await this.drpcMessageRepository.save(agentContext, drpcMessageRecord);
|
|
35
|
+
this.emitStateChangedEvent(agentContext, drpcMessageRecord);
|
|
36
|
+
return {
|
|
37
|
+
requestMessage: drpcMessage,
|
|
38
|
+
record: drpcMessageRecord
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
async createResponseMessage(agentContext, response, drpcRecord) {
|
|
42
|
+
const drpcMessage = new DrpcResponseMessage({
|
|
43
|
+
response,
|
|
44
|
+
threadId: drpcRecord.threadId
|
|
45
|
+
});
|
|
46
|
+
drpcRecord.assertState(DrpcState.RequestReceived);
|
|
47
|
+
drpcRecord.response = response;
|
|
48
|
+
drpcRecord.request = void 0;
|
|
49
|
+
await this.updateState(agentContext, drpcRecord, DrpcState.Completed);
|
|
50
|
+
return {
|
|
51
|
+
responseMessage: drpcMessage,
|
|
52
|
+
record: drpcRecord
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
createRequestListener(callback) {
|
|
56
|
+
const listener = async (event) => {
|
|
57
|
+
const { drpcMessageRecord } = event.payload;
|
|
58
|
+
await callback({
|
|
59
|
+
drpcMessageRecord,
|
|
60
|
+
removeListener: () => this.eventEmitter.off(DrpcRequestEventTypes.DrpcRequestStateChanged, listener)
|
|
61
|
+
});
|
|
62
|
+
};
|
|
63
|
+
this.eventEmitter.on(DrpcRequestEventTypes.DrpcRequestStateChanged, listener);
|
|
64
|
+
return () => {
|
|
65
|
+
this.eventEmitter.off(DrpcRequestEventTypes.DrpcRequestStateChanged, listener);
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
createResponseListener(callback) {
|
|
69
|
+
const listener = async (event) => {
|
|
70
|
+
const { drpcMessageRecord } = event.payload;
|
|
71
|
+
await callback({
|
|
72
|
+
drpcMessageRecord,
|
|
73
|
+
removeListener: () => this.eventEmitter.off(DrpcResponseEventTypes.DrpcResponseStateChanged, listener)
|
|
74
|
+
});
|
|
75
|
+
};
|
|
76
|
+
this.eventEmitter.on(DrpcResponseEventTypes.DrpcResponseStateChanged, listener);
|
|
77
|
+
return () => {
|
|
78
|
+
this.eventEmitter.off(DrpcResponseEventTypes.DrpcResponseStateChanged, listener);
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
async receiveResponse(messageContext) {
|
|
82
|
+
const connection = messageContext.assertReadyConnection();
|
|
83
|
+
const drpcMessageRecord = await this.findByThreadAndConnectionId(messageContext.agentContext, connection.id, messageContext.message.threadId);
|
|
84
|
+
if (!drpcMessageRecord) throw new Error("DRPC message record not found");
|
|
85
|
+
drpcMessageRecord.assertRole(DrpcRole.Client);
|
|
86
|
+
drpcMessageRecord.assertState(DrpcState.RequestSent);
|
|
87
|
+
drpcMessageRecord.response = messageContext.message.response;
|
|
88
|
+
drpcMessageRecord.request = void 0;
|
|
89
|
+
await this.updateState(messageContext.agentContext, drpcMessageRecord, DrpcState.Completed);
|
|
90
|
+
return drpcMessageRecord;
|
|
91
|
+
}
|
|
92
|
+
async receiveRequest(messageContext) {
|
|
93
|
+
const connection = messageContext.assertReadyConnection();
|
|
94
|
+
if (await this.findByThreadAndConnectionId(messageContext.agentContext, connection.id, messageContext.message.threadId)) throw new Error("DRPC message record already exists");
|
|
95
|
+
const drpcMessageRecord = new DrpcRecord({
|
|
96
|
+
request: messageContext.message.request,
|
|
97
|
+
connectionId: connection.id,
|
|
98
|
+
role: DrpcRole.Server,
|
|
99
|
+
state: DrpcState.RequestReceived,
|
|
100
|
+
threadId: messageContext.message.id
|
|
101
|
+
});
|
|
102
|
+
await this.drpcMessageRepository.save(messageContext.agentContext, drpcMessageRecord);
|
|
103
|
+
this.emitStateChangedEvent(messageContext.agentContext, drpcMessageRecord);
|
|
104
|
+
return drpcMessageRecord;
|
|
105
|
+
}
|
|
106
|
+
emitStateChangedEvent(agentContext, drpcMessageRecord) {
|
|
107
|
+
if (drpcMessageRecord.request && (isValidDrpcRequest(drpcMessageRecord.request) || Array.isArray(drpcMessageRecord.request) && drpcMessageRecord.request.length > 0 && isValidDrpcRequest(drpcMessageRecord.request[0]))) this.eventEmitter.emit(agentContext, {
|
|
108
|
+
type: DrpcRequestEventTypes.DrpcRequestStateChanged,
|
|
109
|
+
payload: { drpcMessageRecord: drpcMessageRecord.clone() }
|
|
110
|
+
});
|
|
111
|
+
else if (drpcMessageRecord.response && (isValidDrpcResponse(drpcMessageRecord.response) || Array.isArray(drpcMessageRecord.response) && drpcMessageRecord.response.length > 0 && isValidDrpcResponse(drpcMessageRecord.response[0]))) this.eventEmitter.emit(agentContext, {
|
|
112
|
+
type: DrpcResponseEventTypes.DrpcResponseStateChanged,
|
|
113
|
+
payload: { drpcMessageRecord: drpcMessageRecord.clone() }
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
async updateState(agentContext, drpcRecord, newState) {
|
|
117
|
+
drpcRecord.state = newState;
|
|
118
|
+
await this.drpcMessageRepository.update(agentContext, drpcRecord);
|
|
119
|
+
this.emitStateChangedEvent(agentContext, drpcRecord);
|
|
120
|
+
}
|
|
121
|
+
findByThreadAndConnectionId(agentContext, connectionId, threadId) {
|
|
122
|
+
return this.drpcMessageRepository.findSingleByQuery(agentContext, {
|
|
123
|
+
connectionId,
|
|
124
|
+
threadId
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
async findAllByQuery(agentContext, query, queryOptions) {
|
|
128
|
+
return this.drpcMessageRepository.findByQuery(agentContext, query, queryOptions);
|
|
129
|
+
}
|
|
130
|
+
async getById(agentContext, drpcMessageRecordId) {
|
|
131
|
+
return this.drpcMessageRepository.getById(agentContext, drpcMessageRecordId);
|
|
132
|
+
}
|
|
133
|
+
async deleteById(agentContext, drpcMessageRecordId) {
|
|
134
|
+
const drpcMessageRecord = await this.getById(agentContext, drpcMessageRecordId);
|
|
135
|
+
return this.drpcMessageRepository.delete(agentContext, drpcMessageRecord);
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
DrpcService = __decorate([injectable(), __decorateMetadata("design:paramtypes", [typeof (_ref = typeof DrpcRepository !== "undefined" && DrpcRepository) === "function" ? _ref : Object, typeof (_ref2 = typeof EventEmitter !== "undefined" && EventEmitter) === "function" ? _ref2 : Object])], DrpcService);
|
|
139
|
+
|
|
140
|
+
//#endregion
|
|
141
|
+
export { DrpcService };
|
|
142
|
+
//# sourceMappingURL=DrpcService.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DrpcService.mjs","names":["DrpcService"],"sources":["../../src/services/DrpcService.ts"],"sourcesContent":["import type { AgentContext, Query, QueryOptions } from '@credo-ts/core'\nimport { EventEmitter, injectable } from '@credo-ts/core'\nimport type { DidCommInboundMessageContext } from '@credo-ts/didcomm'\nimport type { DrpcRequestStateChangedEvent } from '../DrpcRequestEvents'\nimport { DrpcRequestEventTypes } from '../DrpcRequestEvents'\nimport type { DrpcResponseStateChangedEvent } from '../DrpcResponseEvents'\nimport { DrpcResponseEventTypes } from '../DrpcResponseEvents'\nimport type { DrpcRequest, DrpcResponse } from '../messages'\nimport { DrpcRequestMessage, DrpcResponseMessage } from '../messages'\nimport { DrpcRole, DrpcState, isValidDrpcRequest, isValidDrpcResponse } from '../models'\nimport { DrpcRecord, DrpcRepository } from '../repository'\n\n@injectable()\nexport class DrpcService {\n private drpcMessageRepository: DrpcRepository\n private eventEmitter: EventEmitter\n\n public constructor(drpcMessageRepository: DrpcRepository, eventEmitter: EventEmitter) {\n this.drpcMessageRepository = drpcMessageRepository\n this.eventEmitter = eventEmitter\n }\n\n public async createRequestMessage(agentContext: AgentContext, request: DrpcRequest, connectionId: string) {\n const drpcMessage = new DrpcRequestMessage({ request })\n\n const drpcMessageRecord = new DrpcRecord({\n request,\n connectionId,\n state: DrpcState.RequestSent,\n threadId: drpcMessage.threadId,\n role: DrpcRole.Client,\n })\n\n await this.drpcMessageRepository.save(agentContext, drpcMessageRecord)\n this.emitStateChangedEvent(agentContext, drpcMessageRecord)\n\n return { requestMessage: drpcMessage, record: drpcMessageRecord }\n }\n\n public async createResponseMessage(agentContext: AgentContext, response: DrpcResponse, drpcRecord: DrpcRecord) {\n const drpcMessage = new DrpcResponseMessage({ response, threadId: drpcRecord.threadId })\n\n drpcRecord.assertState(DrpcState.RequestReceived)\n\n drpcRecord.response = response\n drpcRecord.request = undefined\n\n await this.updateState(agentContext, drpcRecord, DrpcState.Completed)\n\n return { responseMessage: drpcMessage, record: drpcRecord }\n }\n\n public createRequestListener(\n callback: (params: { drpcMessageRecord: DrpcRecord; removeListener: () => void }) => void | Promise<void>\n ) {\n const listener = async (event: DrpcRequestStateChangedEvent) => {\n const { drpcMessageRecord } = event.payload\n await callback({\n drpcMessageRecord,\n removeListener: () => this.eventEmitter.off(DrpcRequestEventTypes.DrpcRequestStateChanged, listener),\n })\n }\n this.eventEmitter.on(DrpcRequestEventTypes.DrpcRequestStateChanged, listener)\n\n return () => {\n this.eventEmitter.off(DrpcRequestEventTypes.DrpcRequestStateChanged, listener)\n }\n }\n\n public createResponseListener(\n callback: (params: { drpcMessageRecord: DrpcRecord; removeListener: () => void }) => void | Promise<void>\n ) {\n const listener = async (event: DrpcResponseStateChangedEvent) => {\n const { drpcMessageRecord } = event.payload\n await callback({\n drpcMessageRecord,\n removeListener: () => this.eventEmitter.off(DrpcResponseEventTypes.DrpcResponseStateChanged, listener),\n })\n }\n this.eventEmitter.on(DrpcResponseEventTypes.DrpcResponseStateChanged, listener)\n return () => {\n this.eventEmitter.off(DrpcResponseEventTypes.DrpcResponseStateChanged, listener)\n }\n }\n\n public async receiveResponse(messageContext: DidCommInboundMessageContext<DrpcResponseMessage>) {\n const connection = messageContext.assertReadyConnection()\n const drpcMessageRecord = await this.findByThreadAndConnectionId(\n messageContext.agentContext,\n connection.id,\n messageContext.message.threadId\n )\n\n if (!drpcMessageRecord) {\n throw new Error('DRPC message record not found')\n }\n\n drpcMessageRecord.assertRole(DrpcRole.Client)\n drpcMessageRecord.assertState(DrpcState.RequestSent)\n drpcMessageRecord.response = messageContext.message.response\n drpcMessageRecord.request = undefined\n\n await this.updateState(messageContext.agentContext, drpcMessageRecord, DrpcState.Completed)\n return drpcMessageRecord\n }\n\n public async receiveRequest(messageContext: DidCommInboundMessageContext<DrpcRequestMessage>) {\n const connection = messageContext.assertReadyConnection()\n const record = await this.findByThreadAndConnectionId(\n messageContext.agentContext,\n connection.id,\n messageContext.message.threadId\n )\n\n if (record) {\n throw new Error('DRPC message record already exists')\n }\n const drpcMessageRecord = new DrpcRecord({\n request: messageContext.message.request,\n connectionId: connection.id,\n role: DrpcRole.Server,\n state: DrpcState.RequestReceived,\n threadId: messageContext.message.id,\n })\n\n await this.drpcMessageRepository.save(messageContext.agentContext, drpcMessageRecord)\n this.emitStateChangedEvent(messageContext.agentContext, drpcMessageRecord)\n return drpcMessageRecord\n }\n\n private emitStateChangedEvent(agentContext: AgentContext, drpcMessageRecord: DrpcRecord) {\n if (\n drpcMessageRecord.request &&\n (isValidDrpcRequest(drpcMessageRecord.request) ||\n (Array.isArray(drpcMessageRecord.request) &&\n drpcMessageRecord.request.length > 0 &&\n isValidDrpcRequest(drpcMessageRecord.request[0])))\n ) {\n this.eventEmitter.emit<DrpcRequestStateChangedEvent>(agentContext, {\n type: DrpcRequestEventTypes.DrpcRequestStateChanged,\n payload: { drpcMessageRecord: drpcMessageRecord.clone() },\n })\n } else if (\n drpcMessageRecord.response &&\n (isValidDrpcResponse(drpcMessageRecord.response) ||\n (Array.isArray(drpcMessageRecord.response) &&\n drpcMessageRecord.response.length > 0 &&\n isValidDrpcResponse(drpcMessageRecord.response[0])))\n ) {\n this.eventEmitter.emit<DrpcResponseStateChangedEvent>(agentContext, {\n type: DrpcResponseEventTypes.DrpcResponseStateChanged,\n payload: { drpcMessageRecord: drpcMessageRecord.clone() },\n })\n }\n }\n\n private async updateState(agentContext: AgentContext, drpcRecord: DrpcRecord, newState: DrpcState) {\n drpcRecord.state = newState\n await this.drpcMessageRepository.update(agentContext, drpcRecord)\n\n this.emitStateChangedEvent(agentContext, drpcRecord)\n }\n\n public findByThreadAndConnectionId(\n agentContext: AgentContext,\n connectionId: string,\n threadId: string\n ): Promise<DrpcRecord | null> {\n return this.drpcMessageRepository.findSingleByQuery(agentContext, {\n connectionId,\n threadId,\n })\n }\n\n public async findAllByQuery(agentContext: AgentContext, query: Query<DrpcRecord>, queryOptions?: QueryOptions) {\n return this.drpcMessageRepository.findByQuery(agentContext, query, queryOptions)\n }\n\n public async getById(agentContext: AgentContext, drpcMessageRecordId: string) {\n return this.drpcMessageRepository.getById(agentContext, drpcMessageRecordId)\n }\n\n public async deleteById(agentContext: AgentContext, drpcMessageRecordId: string) {\n const drpcMessageRecord = await this.getById(agentContext, drpcMessageRecordId)\n return this.drpcMessageRepository.delete(agentContext, drpcMessageRecord)\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import { DrpcService } from "./DrpcService.mjs";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import { DrpcService } from "./DrpcService.mjs";
|
package/package.json
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@credo-ts/drpc",
|
|
3
|
-
"
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
"exports": {
|
|
4
|
+
".": "./build/index.mjs",
|
|
5
|
+
"./package.json": "./package.json"
|
|
6
|
+
},
|
|
7
|
+
"version": "0.6.2-alpha-20251210145840",
|
|
6
8
|
"files": [
|
|
7
9
|
"build"
|
|
8
10
|
],
|
|
@@ -17,20 +19,19 @@
|
|
|
17
19
|
"directory": "packages/drpc"
|
|
18
20
|
},
|
|
19
21
|
"dependencies": {
|
|
20
|
-
"class-transformer": "
|
|
21
|
-
"class-validator": "0.14.1",
|
|
22
|
-
"@credo-ts/core": "0.6.
|
|
22
|
+
"class-transformer": "0.5.1",
|
|
23
|
+
"class-validator": "^0.14.1",
|
|
24
|
+
"@credo-ts/core": "0.6.2-alpha-20251210145840",
|
|
25
|
+
"@credo-ts/didcomm": "0.6.2-alpha-20251210145840"
|
|
23
26
|
},
|
|
24
27
|
"devDependencies": {
|
|
25
|
-
"reflect-metadata": "
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"@credo-ts/node": "0.6.1-pr-2091-20241119140918"
|
|
28
|
+
"reflect-metadata": "0.2.2",
|
|
29
|
+
"typescript": "~5.9.3",
|
|
30
|
+
"@credo-ts/node": "0.6.2-alpha-20251210145840"
|
|
29
31
|
},
|
|
30
32
|
"scripts": {
|
|
31
|
-
"build": "
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
33
|
+
"build": "tsdown --config-loader unconfig"
|
|
34
|
+
},
|
|
35
|
+
"types": "./build/index.d.mts",
|
|
36
|
+
"module": "./build/index.mjs"
|
|
36
37
|
}
|
package/build/DrpcApi.d.ts
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import type { DrpcRequest, DrpcResponse } from './messages';
|
|
2
|
-
import { AgentContext, MessageHandlerRegistry, MessageSender, ConnectionService } from '@credo-ts/core';
|
|
3
|
-
import { DrpcService } from './services';
|
|
4
|
-
export declare class DrpcApi {
|
|
5
|
-
private drpcMessageService;
|
|
6
|
-
private messageSender;
|
|
7
|
-
private connectionService;
|
|
8
|
-
private agentContext;
|
|
9
|
-
constructor(messageHandlerRegistry: MessageHandlerRegistry, drpcMessageService: DrpcService, messageSender: MessageSender, connectionService: ConnectionService, agentContext: AgentContext);
|
|
10
|
-
/**
|
|
11
|
-
* sends the request object to the connection and returns a function that will resolve to the response
|
|
12
|
-
* @param connectionId the connection to send the request to
|
|
13
|
-
* @param request the request object
|
|
14
|
-
* @returns curried function that waits for the response with an optional timeout in seconds
|
|
15
|
-
*/
|
|
16
|
-
sendRequest(connectionId: string, request: DrpcRequest): Promise<() => Promise<DrpcResponse | undefined>>;
|
|
17
|
-
/**
|
|
18
|
-
* Listen for a response that has a thread id matching the provided messageId
|
|
19
|
-
* @param messageId the id to match the response to
|
|
20
|
-
* @param timeoutMs the time in milliseconds to wait for a response
|
|
21
|
-
* @returns the response object
|
|
22
|
-
*/
|
|
23
|
-
private recvResponse;
|
|
24
|
-
/**
|
|
25
|
-
* Listen for a request and returns the request object and a function to send the response
|
|
26
|
-
* @param timeoutMs the time in seconds to wait for a request
|
|
27
|
-
* @returns the request object and a function to send the response
|
|
28
|
-
*/
|
|
29
|
-
recvRequest(timeoutMs?: number): Promise<{
|
|
30
|
-
request: DrpcRequest;
|
|
31
|
-
sendResponse: (response: DrpcResponse) => Promise<void>;
|
|
32
|
-
} | undefined>;
|
|
33
|
-
/**
|
|
34
|
-
* Sends a drpc response to a connection
|
|
35
|
-
* @param connectionId the connection id to use
|
|
36
|
-
* @param threadId the thread id to respond to
|
|
37
|
-
* @param response the drpc response object to send
|
|
38
|
-
*/
|
|
39
|
-
private sendResponse;
|
|
40
|
-
private sendMessage;
|
|
41
|
-
private registerMessageHandlers;
|
|
42
|
-
}
|