@credo-ts/drpc 0.6.1-pr-2091-20241119140918 → 0.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.
Files changed (137) hide show
  1. package/build/DrpcApi.d.mts +50 -0
  2. package/build/DrpcApi.d.mts.map +1 -0
  3. package/build/DrpcApi.mjs +123 -0
  4. package/build/DrpcApi.mjs.map +1 -0
  5. package/build/DrpcModule.d.mts +15 -0
  6. package/build/DrpcModule.d.mts.map +1 -0
  7. package/build/DrpcModule.mjs +39 -0
  8. package/build/DrpcModule.mjs.map +1 -0
  9. package/build/DrpcRequestEvents.d.mts +17 -0
  10. package/build/DrpcRequestEvents.d.mts.map +1 -0
  11. package/build/DrpcRequestEvents.mjs +9 -0
  12. package/build/DrpcRequestEvents.mjs.map +1 -0
  13. package/build/DrpcResponseEvents.d.mts +17 -0
  14. package/build/DrpcResponseEvents.d.mts.map +1 -0
  15. package/build/DrpcResponseEvents.mjs +9 -0
  16. package/build/DrpcResponseEvents.mjs.map +1 -0
  17. package/build/_virtual/_@oxc-project_runtime@0.99.0/helpers/decorate.mjs +10 -0
  18. package/build/_virtual/_@oxc-project_runtime@0.99.0/helpers/decorateMetadata.mjs +7 -0
  19. package/build/_virtual/_@oxc-project_runtime@0.99.0/helpers/decorateParam.mjs +9 -0
  20. package/build/handlers/DrpcRequestHandler.mjs +17 -0
  21. package/build/handlers/DrpcRequestHandler.mjs.map +1 -0
  22. package/build/handlers/DrpcResponseHandler.mjs +17 -0
  23. package/build/handlers/DrpcResponseHandler.mjs.map +1 -0
  24. package/build/handlers/index.mjs +2 -0
  25. package/build/index.d.mts +15 -0
  26. package/build/index.mjs +16 -0
  27. package/build/messages/DrpcRequestMessage.d.mts +22 -0
  28. package/build/messages/DrpcRequestMessage.d.mts.map +1 -0
  29. package/build/messages/DrpcRequestMessage.mjs +29 -0
  30. package/build/messages/DrpcRequestMessage.mjs.map +1 -0
  31. package/build/messages/DrpcResponseMessage.d.mts +30 -0
  32. package/build/messages/DrpcResponseMessage.d.mts.map +1 -0
  33. package/build/messages/DrpcResponseMessage.mjs +30 -0
  34. package/build/messages/DrpcResponseMessage.mjs.map +1 -0
  35. package/build/messages/index.d.mts +2 -0
  36. package/build/messages/index.mjs +2 -0
  37. package/build/models/DrpcErrorCodes.d.mts +12 -0
  38. package/build/models/DrpcErrorCodes.d.mts.map +1 -0
  39. package/build/models/DrpcRole.d.mts +8 -0
  40. package/build/models/DrpcRole.d.mts.map +1 -0
  41. package/build/models/DrpcRole.mjs +10 -0
  42. package/build/models/DrpcRole.mjs.map +1 -0
  43. package/build/models/DrpcState.d.mts +9 -0
  44. package/build/models/DrpcState.d.mts.map +1 -0
  45. package/build/models/DrpcState.mjs +11 -0
  46. package/build/models/DrpcState.mjs.map +1 -0
  47. package/build/models/ValidRequest.d.mts +1 -0
  48. package/build/models/ValidRequest.mjs +28 -0
  49. package/build/models/ValidRequest.mjs.map +1 -0
  50. package/build/models/ValidResponse.d.mts +1 -0
  51. package/build/models/ValidResponse.mjs +38 -0
  52. package/build/models/ValidResponse.mjs.map +1 -0
  53. package/build/models/index.d.mts +5 -0
  54. package/build/models/index.mjs +4 -0
  55. package/build/repository/DrpcRecord.d.mts +45 -0
  56. package/build/repository/DrpcRecord.d.mts.map +1 -0
  57. package/build/repository/DrpcRecord.mjs +38 -0
  58. package/build/repository/DrpcRecord.mjs.map +1 -0
  59. package/build/repository/DrpcRepository.d.mts +10 -0
  60. package/build/repository/DrpcRepository.d.mts.map +1 -0
  61. package/build/repository/DrpcRepository.mjs +22 -0
  62. package/build/repository/DrpcRepository.mjs.map +1 -0
  63. package/build/repository/index.d.mts +2 -0
  64. package/build/repository/index.mjs +2 -0
  65. package/build/services/DrpcService.d.mts +42 -0
  66. package/build/services/DrpcService.d.mts.map +1 -0
  67. package/build/services/DrpcService.mjs +142 -0
  68. package/build/services/DrpcService.mjs.map +1 -0
  69. package/build/services/index.d.mts +1 -0
  70. package/build/services/index.mjs +1 -0
  71. package/package.json +16 -15
  72. package/build/DrpcApi.d.ts +0 -42
  73. package/build/DrpcApi.js +0 -135
  74. package/build/DrpcApi.js.map +0 -1
  75. package/build/DrpcModule.d.ts +0 -9
  76. package/build/DrpcModule.js +0 -33
  77. package/build/DrpcModule.js.map +0 -1
  78. package/build/DrpcRequestEvents.d.ts +0 -11
  79. package/build/DrpcRequestEvents.js +0 -8
  80. package/build/DrpcRequestEvents.js.map +0 -1
  81. package/build/DrpcResponseEvents.d.ts +0 -11
  82. package/build/DrpcResponseEvents.js +0 -8
  83. package/build/DrpcResponseEvents.js.map +0 -1
  84. package/build/handlers/DrpcRequestHandler.d.ts +0 -9
  85. package/build/handlers/DrpcRequestHandler.js +0 -15
  86. package/build/handlers/DrpcRequestHandler.js.map +0 -1
  87. package/build/handlers/DrpcResponseHandler.d.ts +0 -9
  88. package/build/handlers/DrpcResponseHandler.js +0 -15
  89. package/build/handlers/DrpcResponseHandler.js.map +0 -1
  90. package/build/handlers/index.d.ts +0 -2
  91. package/build/handlers/index.js +0 -19
  92. package/build/handlers/index.js.map +0 -1
  93. package/build/index.d.ts +0 -8
  94. package/build/index.js +0 -25
  95. package/build/index.js.map +0 -1
  96. package/build/messages/DrpcRequestMessage.d.ts +0 -16
  97. package/build/messages/DrpcRequestMessage.js +0 -37
  98. package/build/messages/DrpcRequestMessage.js.map +0 -1
  99. package/build/messages/DrpcResponseMessage.d.ts +0 -23
  100. package/build/messages/DrpcResponseMessage.js +0 -38
  101. package/build/messages/DrpcResponseMessage.js.map +0 -1
  102. package/build/messages/index.d.ts +0 -2
  103. package/build/messages/index.js +0 -19
  104. package/build/messages/index.js.map +0 -1
  105. package/build/models/DrpcErrorCodes.d.ts +0 -8
  106. package/build/models/DrpcErrorCodes.js +0 -13
  107. package/build/models/DrpcErrorCodes.js.map +0 -1
  108. package/build/models/DrpcRole.d.ts +0 -4
  109. package/build/models/DrpcRole.js +0 -9
  110. package/build/models/DrpcRole.js.map +0 -1
  111. package/build/models/DrpcState.d.ts +0 -5
  112. package/build/models/DrpcState.js +0 -10
  113. package/build/models/DrpcState.js.map +0 -1
  114. package/build/models/ValidRequest.d.ts +0 -3
  115. package/build/models/ValidRequest.js +0 -39
  116. package/build/models/ValidRequest.js.map +0 -1
  117. package/build/models/ValidResponse.d.ts +0 -3
  118. package/build/models/ValidResponse.js +0 -61
  119. package/build/models/ValidResponse.js.map +0 -1
  120. package/build/models/index.d.ts +0 -5
  121. package/build/models/index.js +0 -22
  122. package/build/models/index.js.map +0 -1
  123. package/build/repository/DrpcRecord.d.ts +0 -37
  124. package/build/repository/DrpcRecord.js +0 -40
  125. package/build/repository/DrpcRecord.js.map +0 -1
  126. package/build/repository/DrpcRepository.d.ts +0 -5
  127. package/build/repository/DrpcRepository.js +0 -29
  128. package/build/repository/DrpcRepository.js.map +0 -1
  129. package/build/repository/index.d.ts +0 -2
  130. package/build/repository/index.js +0 -19
  131. package/build/repository/index.js.map +0 -1
  132. package/build/services/DrpcService.d.ts +0 -34
  133. package/build/services/DrpcService.js +0 -150
  134. package/build/services/DrpcService.js.map +0 -1
  135. package/build/services/index.d.ts +0 -1
  136. package/build/services/index.js +0 -18
  137. 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,9 @@
1
+ //#region src/models/DrpcState.d.ts
2
+ declare enum DrpcState {
3
+ RequestSent = "request-sent",
4
+ RequestReceived = "request-received",
5
+ Completed = "completed",
6
+ }
7
+ //#endregion
8
+ export { DrpcState };
9
+ //# sourceMappingURL=DrpcState.d.mts.map
@@ -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,5 @@
1
+ import { DrpcErrorCode } from "./DrpcErrorCodes.mjs";
2
+ import { DrpcRole } from "./DrpcRole.mjs";
3
+ import { DrpcState } from "./DrpcState.mjs";
4
+ import "./ValidRequest.mjs";
5
+ import "./ValidResponse.mjs";
@@ -0,0 +1,4 @@
1
+ import { DrpcRole } from "./DrpcRole.mjs";
2
+ import { DrpcState } from "./DrpcState.mjs";
3
+ import { IsValidDrpcRequest, isValidDrpcRequest } from "./ValidRequest.mjs";
4
+ import { IsValidDrpcResponse, isValidDrpcResponse } from "./ValidResponse.mjs";
@@ -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,2 @@
1
+ import { CustomDrpcMessageTags, DefaultDrpcMessageTags, DrpcMessageTags, DrpcRecord, DrpcStorageProps } from "./DrpcRecord.mjs";
2
+ import { DrpcRepository } from "./DrpcRepository.mjs";
@@ -0,0 +1,2 @@
1
+ import { DrpcRecord } from "./DrpcRecord.mjs";
2
+ import { DrpcRepository } from "./DrpcRepository.mjs";
@@ -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
- "main": "build/index",
4
- "types": "build/index",
5
- "version": "0.6.1-pr-2091-20241119140918",
3
+ "exports": {
4
+ ".": "./build/index.mjs",
5
+ "./package.json": "./package.json"
6
+ },
7
+ "version": "0.6.1",
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": "^0.5.1",
21
- "class-validator": "0.14.1",
22
- "@credo-ts/core": "0.6.1-pr-2091-20241119140918"
22
+ "class-transformer": "0.5.1",
23
+ "class-validator": "^0.14.1",
24
+ "@credo-ts/core": "0.6.1",
25
+ "@credo-ts/didcomm": "0.6.1"
23
26
  },
24
27
  "devDependencies": {
25
- "reflect-metadata": "^0.1.13",
26
- "rimraf": "^4.4.0",
27
- "typescript": "~5.5.2",
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.1"
29
31
  },
30
32
  "scripts": {
31
- "build": "pnpm run clean && pnpm run compile",
32
- "clean": "rimraf ./build",
33
- "compile": "tsc -p tsconfig.build.json",
34
- "test": "jest"
35
- }
33
+ "build": "tsdown --config-loader unconfig"
34
+ },
35
+ "types": "./build/index.d.mts",
36
+ "module": "./build/index.mjs"
36
37
  }
@@ -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
- }