@extrimian/agent 0.12.0-2 → 0.12.0-4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/dist/agent.d.ts +77 -0
  2. package/dist/agent.js +174 -0
  3. package/dist/agent.js.map +1 -0
  4. package/dist/data-share-behaviours/data-share-behavior.d.ts +4 -0
  5. package/dist/data-share-behaviours/data-share-behavior.js +3 -0
  6. package/dist/data-share-behaviours/data-share-behavior.js.map +1 -0
  7. package/dist/data-share-behaviours/identity-data-share-behavior.d.ts +16 -0
  8. package/dist/data-share-behaviours/identity-data-share-behavior.js +3 -0
  9. package/dist/data-share-behaviours/identity-data-share-behavior.js.map +1 -0
  10. package/dist/data-share-behaviours/identity-plaintext-data-share-behavior.d.ts +5 -0
  11. package/dist/data-share-behaviours/identity-plaintext-data-share-behavior.js +16 -0
  12. package/dist/data-share-behaviours/identity-plaintext-data-share-behavior.js.map +1 -0
  13. package/dist/data-share-behaviours/vcs/vc-share-behavior.d.ts +12 -0
  14. package/dist/data-share-behaviours/vcs/vc-share-behavior.js +3 -0
  15. package/dist/data-share-behaviours/vcs/vc-share-behavior.js.map +1 -0
  16. package/dist/data-share-behaviours/vcs/vc-share-didcomm-behavior.d.ts +20 -0
  17. package/dist/data-share-behaviours/vcs/vc-share-didcomm-behavior.js +30 -0
  18. package/dist/data-share-behaviours/vcs/vc-share-didcomm-behavior.js.map +1 -0
  19. package/dist/did/did-services.d.ts +14 -0
  20. package/dist/did/did-services.js +15 -0
  21. package/dist/did/did-services.js.map +1 -0
  22. package/dist/exceptions/agent-plugin-not-found.d.ts +2 -0
  23. package/dist/exceptions/agent-plugin-not-found.js +7 -0
  24. package/dist/exceptions/agent-plugin-not-found.js.map +1 -0
  25. package/dist/exceptions/vc-protocol-not-found.d.ts +3 -0
  26. package/dist/exceptions/vc-protocol-not-found.js +12 -0
  27. package/dist/exceptions/vc-protocol-not-found.js.map +1 -0
  28. package/dist/index.d.ts +32 -0
  29. package/dist/index.js +61 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/messaging/messaging.d.ts +41 -0
  32. package/dist/messaging/messaging.js +89 -0
  33. package/dist/messaging/messaging.js.map +1 -0
  34. package/dist/models/agent-identity.d.ts +86 -0
  35. package/dist/models/agent-identity.js +400 -0
  36. package/dist/models/agent-identity.js.map +1 -0
  37. package/dist/models/agent-kms.d.ts +42 -0
  38. package/dist/models/agent-kms.js +79 -0
  39. package/dist/models/agent-kms.js.map +1 -0
  40. package/dist/models/agent-pbk.d.ts +11 -0
  41. package/dist/models/agent-pbk.js +12 -0
  42. package/dist/models/agent-pbk.js.map +1 -0
  43. package/dist/models/agent-registry.d.ts +94 -0
  44. package/dist/models/agent-registry.js +130 -0
  45. package/dist/models/agent-registry.js.map +1 -0
  46. package/dist/models/agent-resolver-cache.d.ts +21 -0
  47. package/dist/models/agent-resolver-cache.js +48 -0
  48. package/dist/models/agent-resolver-cache.js.map +1 -0
  49. package/dist/models/agent-resolver.d.ts +19 -0
  50. package/dist/models/agent-resolver.js +34 -0
  51. package/dist/models/agent-resolver.js.map +1 -0
  52. package/dist/models/agent-secure-storage.d.ts +3 -0
  53. package/dist/models/agent-secure-storage.js +3 -0
  54. package/dist/models/agent-secure-storage.js.map +1 -0
  55. package/dist/models/agent-secure-storages/filesystem-agent-secure-storage.d.ts +14 -0
  56. package/dist/models/agent-secure-storages/filesystem-agent-secure-storage.js +49 -0
  57. package/dist/models/agent-secure-storages/filesystem-agent-secure-storage.js.map +1 -0
  58. package/dist/models/agent-storage.d.ts +9 -0
  59. package/dist/models/agent-storage.js +3 -0
  60. package/dist/models/agent-storage.js.map +1 -0
  61. package/dist/models/did.d.ts +19 -0
  62. package/dist/models/did.js +64 -0
  63. package/dist/models/did.js.map +1 -0
  64. package/dist/models/transports/ami-transport.d.ts +30 -0
  65. package/dist/models/transports/ami-transport.js +184 -0
  66. package/dist/models/transports/ami-transport.js.map +1 -0
  67. package/dist/models/transports/connectable-transport.d.ts +25 -0
  68. package/dist/models/transports/connectable-transport.js +26 -0
  69. package/dist/models/transports/connectable-transport.js.map +1 -0
  70. package/dist/models/transports/dwn-transport.d.ts +32 -0
  71. package/dist/models/transports/dwn-transport.js +192 -0
  72. package/dist/models/transports/dwn-transport.js.map +1 -0
  73. package/dist/models/transports/messaging-transport.d.ts +3 -0
  74. package/dist/models/transports/messaging-transport.js +3 -0
  75. package/dist/models/transports/messaging-transport.js.map +1 -0
  76. package/dist/models/transports/transport.d.ts +30 -0
  77. package/dist/models/transports/transport.js +8 -0
  78. package/dist/models/transports/transport.js.map +1 -0
  79. package/dist/models/transports/websocket-client-transport.d.ts +5 -0
  80. package/dist/models/transports/websocket-client-transport.js +34 -0
  81. package/dist/models/transports/websocket-client-transport.js.map +1 -0
  82. package/dist/models/transports/websocket-server-transport.d.ts +7 -0
  83. package/dist/models/transports/websocket-server-transport.js +22 -0
  84. package/dist/models/transports/websocket-server-transport.js.map +1 -0
  85. package/dist/models/transports/websocket-transport.d.ts +30 -0
  86. package/dist/models/transports/websocket-transport.js +85 -0
  87. package/dist/models/transports/websocket-transport.js.map +1 -0
  88. package/dist/models/vc-storage.d.ts +8 -0
  89. package/dist/models/vc-storage.js +3 -0
  90. package/dist/models/vc-storage.js.map +1 -0
  91. package/dist/plugins/iplugin.d.ts +17 -0
  92. package/dist/plugins/iplugin.js +3 -0
  93. package/dist/plugins/iplugin.js.map +1 -0
  94. package/dist/plugins/istatus-list-plugin.d.ts +14 -0
  95. package/dist/plugins/istatus-list-plugin.js +3 -0
  96. package/dist/plugins/istatus-list-plugin.js.map +1 -0
  97. package/dist/plugins/ivc-interceptor-plugin.d.ts +9 -0
  98. package/dist/plugins/ivc-interceptor-plugin.js +3 -0
  99. package/dist/plugins/ivc-interceptor-plugin.js.map +1 -0
  100. package/dist/plugins/plugin-dispatcher.d.ts +6 -0
  101. package/dist/plugins/plugin-dispatcher.js +20 -0
  102. package/dist/plugins/plugin-dispatcher.js.map +1 -0
  103. package/dist/transport/transport.d.ts +43 -0
  104. package/dist/transport/transport.js +110 -0
  105. package/dist/transport/transport.js.map +1 -0
  106. package/dist/utils/index.d.ts +1 -0
  107. package/dist/utils/index.js +15 -0
  108. package/dist/utils/index.js.map +1 -0
  109. package/dist/utils/lite-event.d.ts +25 -0
  110. package/dist/utils/lite-event.js +37 -0
  111. package/dist/utils/lite-event.js.map +1 -0
  112. package/dist/vc/models/credentia-flow.d.ts +4 -0
  113. package/dist/vc/models/credentia-flow.js +9 -0
  114. package/dist/vc/models/credentia-flow.js.map +1 -0
  115. package/dist/vc/models/credential-request.d.ts +3 -0
  116. package/dist/vc/models/credential-request.js +3 -0
  117. package/dist/vc/models/credential-request.js.map +1 -0
  118. package/dist/vc/models/vc-create-key-request.d.ts +4 -0
  119. package/dist/vc/models/vc-create-key-request.js +3 -0
  120. package/dist/vc/models/vc-create-key-request.js.map +1 -0
  121. package/dist/vc/models/waci-message.d.ts +3 -0
  122. package/dist/vc/models/waci-message.js +8 -0
  123. package/dist/vc/models/waci-message.js.map +1 -0
  124. package/dist/vc/protocols/openid-protocol.d.ts +161 -0
  125. package/dist/vc/protocols/openid-protocol.js +126 -0
  126. package/dist/vc/protocols/openid-protocol.js.map +1 -0
  127. package/dist/vc/protocols/vc-protocol.d.ts +106 -0
  128. package/dist/vc/protocols/vc-protocol.js +37 -0
  129. package/dist/vc/protocols/vc-protocol.js.map +1 -0
  130. package/dist/vc/protocols/waci-protocol.d.ts +183 -0
  131. package/dist/vc/protocols/waci-protocol.js +553 -0
  132. package/dist/vc/protocols/waci-protocol.js.map +1 -0
  133. package/dist/vc/vc-setup/vc-setup.d.ts +0 -0
  134. package/dist/vc/vc-setup/vc-setup.js +1 -0
  135. package/dist/vc/vc-setup/vc-setup.js.map +1 -0
  136. package/dist/vc/vc.d.ts +225 -0
  137. package/dist/vc/vc.js +329 -0
  138. package/dist/vc/vc.js.map +1 -0
  139. package/package.json +2 -2
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DID = void 0;
4
+ const base_64_1 = require("base-64");
5
+ class DID {
6
+ constructor(did) {
7
+ if (this.validate(did)) {
8
+ this.value = did;
9
+ }
10
+ }
11
+ /**
12
+ * This method converts a string value or full verification method id to a data value DID object.
13
+ *
14
+ * @param did - DID input. This value can also be a full verification method id.
15
+ * @returns Data value object that represent a DID
16
+ */
17
+ static from(did) {
18
+ if ((did === null || did === void 0 ? void 0 : did.indexOf('#')) > -1) {
19
+ return new DID(did.substring(0, did.indexOf('#')));
20
+ }
21
+ return new DID(did);
22
+ }
23
+ validate(did) {
24
+ return true;
25
+ }
26
+ getDidMethod() {
27
+ return this.value.substring(0, this.value.lastIndexOf(':'));
28
+ }
29
+ isEqual(other) {
30
+ // Lógica de comparación personalizada aquí
31
+ // Compara los atributos relevantes de los objetos y devuelve true si son iguales, false en caso contrario
32
+ return this.value == other.value;
33
+ }
34
+ isLongDIDFor(shortDID) {
35
+ return !shortDID.isLongDID() && this.isLongDID() && this.value.indexOf(shortDID.value) != -1;
36
+ }
37
+ isShortDIDFor(longDID) {
38
+ return longDID.isLongDIDFor(this);
39
+ }
40
+ getDIDSuffix() {
41
+ return this.isLongDID() ? this.getLongDIDSuffix() : this.value.substring(this.value.lastIndexOf(":") + 1);
42
+ }
43
+ getLongDIDSuffix() {
44
+ const ultimoIndice = this.value.lastIndexOf(":");
45
+ if (ultimoIndice === -1) {
46
+ return null;
47
+ }
48
+ const index = this.value.lastIndexOf(":", ultimoIndice - 1);
49
+ return this.value.substring(index + 1);
50
+ }
51
+ isLongDID() {
52
+ try {
53
+ const lastSegment = this.value.substring(this.value.lastIndexOf(':') + 1);
54
+ const data = (0, base_64_1.decode)(lastSegment);
55
+ const obj = JSON.parse(data);
56
+ return obj.delta != null;
57
+ }
58
+ catch {
59
+ return false;
60
+ }
61
+ }
62
+ }
63
+ exports.DID = DID;
64
+ //# sourceMappingURL=did.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"did.js","sourceRoot":"","sources":["../../src/models/did.ts"],"names":[],"mappings":";;;AAAA,qCAAiC;AAEjC,MAAa,GAAG;IAGd,YAAoB,GAAW;QAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACtB,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;SAClB;IACH,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,IAAI,CAAC,GAAW;QACrB,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,OAAO,CAAC,GAAG,CAAC,IAAG,CAAC,CAAC,EAAE;YAC1B,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACpD;QACD,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IAED,QAAQ,CAAC,GAAW;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,CAAC,KAAU;QAChB,2CAA2C;QAC3C,0GAA0G;QAC1G,OAAO,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;IACnC,CAAC;IAEM,YAAY,CAAC,QAAa;QAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/F,CAAC;IAEM,aAAa,CAAC,OAAY;QAC/B,OAAO,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5G,CAAC;IAEO,gBAAgB;QACtB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE;YACvB,OAAO,IAAI,CAAC;SACb;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,SAAS;QACP,IAAI;YACF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1E,MAAM,IAAI,GAAG,IAAA,gBAAM,EAAC,WAAW,CAAC,CAAC;YACjC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAE7B,OAAO,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC;SAC1B;QAAC,MAAM;YACN,OAAO,KAAK,CAAC;SACd;IACH,CAAC;CACF;AArED,kBAqEC"}
@@ -0,0 +1,30 @@
1
+ import { DIDDocument } from '@extrimian/did-core';
2
+ import { DWNAmiClient, MessageStorage } from '@extrimian/dwn-client-ami';
3
+ import { Agent } from '../../agent';
4
+ import { ILiteEvent } from '../../utils/lite-event';
5
+ import { DID } from '../did';
6
+ import { IMessagingTransport } from './messaging-transport';
7
+ import { MessageArrivedEventArg, TransportSendRequest } from './transport';
8
+ export declare class DWNAmiTransport implements IMessagingTransport {
9
+ private readonly onMessageArrived;
10
+ get messageArrived(): ILiteEvent<MessageArrivedEventArg>;
11
+ dwnClientMap: Map<string, DWNAmiClient>;
12
+ agent: Agent;
13
+ private resolver;
14
+ dwnPollMilliseconds: number;
15
+ constructor(params?: {
16
+ dwnPollMilliseconds: number;
17
+ });
18
+ transportSupportedByTarget(params: {
19
+ targetDID: DID;
20
+ }): Promise<boolean>;
21
+ dispose(): Promise<void>;
22
+ processNewDID(did: DID, initialzing?: boolean): Promise<void>;
23
+ initialize(params: {
24
+ agent: Agent;
25
+ }): Promise<void>;
26
+ send(params: TransportSendRequest): Promise<void>;
27
+ startPollSpecificClient(did: string, dwnClient: DWNAmiClient): Promise<void>;
28
+ getServiceUrl(didDocument: DIDDocument, serviceType: string, serviceEndpointMapKey?: string): string[];
29
+ }
30
+ export declare const inMemoryMessageStorage: MessageStorage;
@@ -0,0 +1,184 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.inMemoryMessageStorage = exports.DWNAmiTransport = void 0;
4
+ const did_core_1 = require("@extrimian/did-core");
5
+ const dwn_client_ami_1 = require("@extrimian/dwn-client-ami");
6
+ const lite_event_1 = require("../../utils/lite-event");
7
+ const did_1 = require("../did");
8
+ var AsyncLock = require('async-lock');
9
+ var lock = new AsyncLock();
10
+ class DWNAmiTransport {
11
+ get messageArrived() {
12
+ return this.onMessageArrived.expose();
13
+ }
14
+ constructor(params) {
15
+ this.onMessageArrived = new lite_event_1.LiteEvent();
16
+ this.dwnClientMap = new Map();
17
+ this.dwnPollMilliseconds = (params === null || params === void 0 ? void 0 : params.dwnPollMilliseconds) || 10000;
18
+ }
19
+ async transportSupportedByTarget(params) {
20
+ const targetDidDocument = await this.resolver.resolve(params.targetDID);
21
+ const dwnUrl = await did_core_1.DIDDocumentUtils.getServiceUrl(targetDidDocument, 'DecentralizedWebNode', 'nodes')[0];
22
+ return dwnUrl != null;
23
+ }
24
+ async dispose() {
25
+ // TODO: dispose
26
+ }
27
+ async processNewDID(did, initialzing = false) {
28
+ await lock.acquire("dwnClients", async () => {
29
+ if (this.dwnClientMap.get(did.value))
30
+ return;
31
+ if (!did.isLongDID()) {
32
+ const longDidDWNClient = Array.from(this.dwnClientMap.keys()).map(x => did_1.DID.from(x)).find(x => x.isLongDIDFor(did));
33
+ //Si ya existe un dwn transport polleando el long, se debe eliminar ese polleo y comenzar a pollear el short.
34
+ if (longDidDWNClient) {
35
+ this.dwnClientMap.delete(longDidDWNClient.value);
36
+ }
37
+ }
38
+ else {
39
+ const shortDidDWNClient = Array.from(this.dwnClientMap.keys()).map(x => did_1.DID.from(x)).find(x => x.isShortDIDFor(did));
40
+ //Si ya existe un dwn transport polleando el short, no se debe pollear el DWN del longDID.
41
+ if (shortDidDWNClient)
42
+ return;
43
+ }
44
+ const didDocument = await this.resolver.resolve(did);
45
+ let dwnClient;
46
+ try {
47
+ const dwnEndpoint = this.getServiceUrl(didDocument, 'DecentralizedWebNode', 'nodes');
48
+ if (!dwnEndpoint)
49
+ return;
50
+ dwnClient = new dwn_client_ami_1.DWNAmiClient({
51
+ did: did.value,
52
+ storage: exports.inMemoryMessageStorage,
53
+ inboxURL: dwnEndpoint[0],
54
+ });
55
+ }
56
+ catch (ex) {
57
+ console.error('An error occurred while polling for the DWN: DIDDocument has not a DWN service defined or it is not correct');
58
+ return;
59
+ }
60
+ this.dwnClientMap.set(did.value, dwnClient);
61
+ dwnClient.addSubscriber(async (messages) => {
62
+ messages.forEach((message) => {
63
+ //Los mensajes de DIDComm en el DWN vienen con caracteres extraños y no permiten JSON.parsear el string si no se remueven esos caracteres.
64
+ let messageManagerCompatible = false;
65
+ if (message.data.message) {
66
+ message.data = JSON.parse(message.data.message);
67
+ messageManagerCompatible = true;
68
+ }
69
+ if (typeof message.data === 'string' &&
70
+ message.data.indexOf('{') != 0 &&
71
+ message.data.indexOf('"header":{"alg":"ECDH-1PU') > -1) {
72
+ message.data = message.data.substring(message.data.indexOf('{'), message.data.lastIndexOf('}') + 1);
73
+ }
74
+ this.onMessageArrived.trigger({
75
+ from: null,
76
+ // from: messages[0].data?.message?.from,
77
+ data: message.data,
78
+ context: { ...message, messageManagerCompatible },
79
+ });
80
+ });
81
+ });
82
+ if (!initialzing) {
83
+ this.startPollSpecificClient(did.value, dwnClient);
84
+ }
85
+ });
86
+ }
87
+ async initialize(params) {
88
+ this.agent = params.agent;
89
+ this.resolver = this.agent.resolver;
90
+ const dids = this.agent.identity.getDIDs();
91
+ for (let did of dids) {
92
+ await this.processNewDID(did_1.DID.from(did), true);
93
+ }
94
+ Array.from(this.dwnClientMap.keys()).forEach(did => {
95
+ this.startPollSpecificClient(did, this.dwnClientMap.get(did));
96
+ });
97
+ this.agent.identity.didCreated.on((args) => {
98
+ this.processNewDID(args.did);
99
+ });
100
+ this.onMessageArrived.on(async (data) => {
101
+ await this.agent.transport.handleMessage(data, this);
102
+ });
103
+ }
104
+ async send(params) {
105
+ var _a, _b, _c;
106
+ const targetDidDocument = await this.resolver.resolve(params.to);
107
+ const dwnUrl = await did_core_1.DIDDocumentUtils.getServiceUrl(targetDidDocument, 'DecentralizedWebNode', 'nodes')[0];
108
+ const msgParams = {
109
+ targetDID: params.to.value,
110
+ targetInboxURL: dwnUrl,
111
+ message: {
112
+ data: ((_a = params.context) === null || _a === void 0 ? void 0 : _a.messageManagerCompatible)
113
+ ? { message: JSON.stringify(params.data) }
114
+ : params.data,
115
+ descriptor: {
116
+ method: undefined,
117
+ dateCreated: new Date(),
118
+ dataFormat: 'application/json',
119
+ },
120
+ },
121
+ };
122
+ if (!((_c = (_b = params.context) === null || _b === void 0 ? void 0 : _b.descriptor) === null || _c === void 0 ? void 0 : _c.method)) {
123
+ msgParams.message.descriptor.method = dwn_client_ami_1.ThreadMethod.Create;
124
+ }
125
+ else {
126
+ msgParams.message.descriptor.method = dwn_client_ami_1.ThreadMethod.Reply;
127
+ msgParams.message.descriptor.root =
128
+ params.context.descriptor.root || params.context.descriptor.objectId;
129
+ msgParams.message.descriptor.parent = params.context.descriptor.objectId;
130
+ }
131
+ await this.dwnClientMap
132
+ .get(this.agent.identity.getOperationalDID().value)
133
+ .sendMessage(msgParams)
134
+ .catch(console.error);
135
+ }
136
+ async startPollSpecificClient(did, dwnClient) {
137
+ try {
138
+ await dwnClient.pullNewMessageWait();
139
+ }
140
+ catch {
141
+ console.error("Error polling DWNClient for DID", did);
142
+ }
143
+ finally {
144
+ setTimeout(() => {
145
+ if (this.dwnClientMap.get(did)) {
146
+ this.startPollSpecificClient(did, dwnClient);
147
+ }
148
+ }, this.dwnPollMilliseconds);
149
+ }
150
+ }
151
+ getServiceUrl(didDocument, serviceType, serviceEndpointMapKey) {
152
+ var _a;
153
+ try {
154
+ const service = (_a = didDocument.service) === null || _a === void 0 ? void 0 : _a.find((service) => service.type === serviceType);
155
+ if (!service)
156
+ return null;
157
+ if (typeof service.serviceEndpoint === 'object')
158
+ return service.serviceEndpoint[serviceEndpointMapKey];
159
+ return [service.serviceEndpoint];
160
+ }
161
+ catch (error) {
162
+ console.error(error);
163
+ throw Error(`Error finding ${serviceType} service in DID Document`);
164
+ }
165
+ }
166
+ }
167
+ exports.DWNAmiTransport = DWNAmiTransport;
168
+ const messagesStorage = [];
169
+ let lastPullDate;
170
+ exports.inMemoryMessageStorage = {
171
+ async getMessages() {
172
+ return messagesStorage;
173
+ },
174
+ async getLastPullDate() {
175
+ return lastPullDate;
176
+ },
177
+ async updateLastPullDate(date) {
178
+ lastPullDate = date;
179
+ },
180
+ async saveMessages(messages) {
181
+ messagesStorage.push(...messages);
182
+ },
183
+ };
184
+ //# sourceMappingURL=ami-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ami-transport.js","sourceRoot":"","sources":["../../../src/models/transports/ami-transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { Agent } from '../../agent';
2
+ import { ILiteEvent, LiteEvent } from '../../utils/lite-event';
3
+ import { DID } from '../did';
4
+ import { ITransport, MessageArrivedEventArg } from './transport';
5
+ export declare abstract class ConnectableTransport implements ITransport {
6
+ protected agent: Agent;
7
+ protected readonly onMessageArrived: LiteEvent<MessageArrivedEventArg>;
8
+ protected handleConnect(params?: {
9
+ did: DID;
10
+ }): void;
11
+ protected handleDisconnect(params: {
12
+ did: DID;
13
+ }): void;
14
+ initialize(params: {
15
+ agent: Agent;
16
+ }): Promise<void>;
17
+ get messageArrived(): ILiteEvent<MessageArrivedEventArg>;
18
+ abstract send(params: {
19
+ data: any;
20
+ context?: any;
21
+ }): Promise<void> | void;
22
+ protected handleMessage(params: MessageArrivedEventArg, transport: ITransport): Promise<void>;
23
+ abstract transportSupportedByTarget(params: {}): Promise<boolean>;
24
+ abstract dispose(): Promise<void>;
25
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConnectableTransport = void 0;
4
+ const lite_event_1 = require("../../utils/lite-event");
5
+ class ConnectableTransport {
6
+ constructor() {
7
+ this.onMessageArrived = new lite_event_1.LiteEvent();
8
+ }
9
+ handleConnect(params) {
10
+ this.agent.transport.handleConnect({ did: params.did });
11
+ }
12
+ handleDisconnect(params) {
13
+ this.agent.transport.handleDisconnect({ did: params.did });
14
+ }
15
+ async initialize(params) {
16
+ this.agent = params.agent;
17
+ }
18
+ get messageArrived() {
19
+ return this.onMessageArrived.expose();
20
+ }
21
+ handleMessage(params, transport) {
22
+ return this.agent.transport.handleMessage(params, transport);
23
+ }
24
+ }
25
+ exports.ConnectableTransport = ConnectableTransport;
26
+ //# sourceMappingURL=connectable-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectable-transport.js","sourceRoot":"","sources":["../../../src/models/transports/connectable-transport.ts"],"names":[],"mappings":";;;AACA,uDAA+D;AAI/D,MAAsB,oBAAoB;IAA1C;QAEqB,qBAAgB,GAAG,IAAI,sBAAS,EAA0B,CAAC;IA8BhF,CAAC;IA5BW,aAAa,CAAC,MAAqB;QAC3C,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1D,CAAC;IAES,gBAAgB,CAAC,MAAoB;QAC7C,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAwB;QACvC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC5B,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;IACxC,CAAC;IAIS,aAAa,CACrB,MAA8B,EAC9B,SAAqB;QAErB,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC/D,CAAC;CAKF;AAhCD,oDAgCC"}
@@ -0,0 +1,32 @@
1
+ import { DIDDocument } from '@extrimian/did-core';
2
+ import { DWNClient, MessageStorage } from '@extrimian/dwn-client';
3
+ import { Agent } from '../../agent';
4
+ import { ILiteEvent } from '../../utils/lite-event';
5
+ import { DID } from '../did';
6
+ import { IMessagingTransport } from './messaging-transport';
7
+ import { MessageArrivedEventArg, TransportSendRequest } from './transport';
8
+ export declare class DWNTransport implements IMessagingTransport {
9
+ private readonly onMessageArrived;
10
+ get messageArrived(): ILiteEvent<MessageArrivedEventArg>;
11
+ dwnClientMap: Map<string, DWNClient>;
12
+ agent: Agent;
13
+ private resolver;
14
+ dwnPollMilliseconds: number;
15
+ storage?: MessageStorage;
16
+ constructor(params?: {
17
+ dwnPollMilliseconds?: number;
18
+ storage?: MessageStorage;
19
+ });
20
+ transportSupportedByTarget(params: {
21
+ targetDID: DID;
22
+ }): Promise<boolean>;
23
+ dispose(): Promise<void>;
24
+ processNewDID(did: DID, initialzing?: boolean): Promise<void>;
25
+ initialize(params: {
26
+ agent: Agent;
27
+ }): Promise<void>;
28
+ send(params: TransportSendRequest): Promise<void>;
29
+ startPollSpecificClient(did: string, dwnClient: DWNClient): Promise<void>;
30
+ getServiceUrl(didDocument: DIDDocument, serviceType: string, serviceEndpointMapKey?: string): string[];
31
+ }
32
+ export declare const inMemoryMessageStorage: MessageStorage;
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.inMemoryMessageStorage = exports.DWNTransport = void 0;
4
+ const did_core_1 = require("@extrimian/did-core");
5
+ const dwn_client_1 = require("@extrimian/dwn-client");
6
+ const lite_event_1 = require("../../utils/lite-event");
7
+ const did_1 = require("../did");
8
+ var AsyncLock = require('async-lock');
9
+ var lock = new AsyncLock();
10
+ class DWNTransport {
11
+ get messageArrived() {
12
+ return this.onMessageArrived.expose();
13
+ }
14
+ // constructor(params?: {
15
+ // dwnPollMilliseconds: number,
16
+ // storage?: MessageStorage
17
+ // }) {
18
+ // this.dwnPollMilliseconds = params?.dwnPollMilliseconds || 10000;
19
+ // this.storage = params.storage;
20
+ // }
21
+ constructor(params) {
22
+ this.onMessageArrived = new lite_event_1.LiteEvent();
23
+ this.dwnClientMap = new Map();
24
+ this.dwnPollMilliseconds = (params === null || params === void 0 ? void 0 : params.dwnPollMilliseconds) || 10000;
25
+ this.storage = (params === null || params === void 0 ? void 0 : params.storage) || exports.inMemoryMessageStorage;
26
+ }
27
+ async transportSupportedByTarget(params) {
28
+ const targetDidDocument = await this.resolver.resolve(params.targetDID);
29
+ const dwnUrl = await did_core_1.DIDDocumentUtils.getServiceUrl(targetDidDocument, 'DecentralizedWebNode', 'nodes')[0];
30
+ return dwnUrl != null;
31
+ }
32
+ async dispose() {
33
+ // TODO: dispose
34
+ }
35
+ async processNewDID(did, initialzing = false) {
36
+ await lock.acquire("dwnClients", async () => {
37
+ if (this.dwnClientMap.get(did.value))
38
+ return;
39
+ if (!did.isLongDID()) {
40
+ const longDidDWNClient = Array.from(this.dwnClientMap.keys()).map(x => did_1.DID.from(x)).find(x => x.isLongDIDFor(did));
41
+ //Si ya existe un dwn transport polleando el long, se debe eliminar ese polleo y comenzar a pollear el short.
42
+ if (longDidDWNClient) {
43
+ this.dwnClientMap.delete(longDidDWNClient.value);
44
+ }
45
+ }
46
+ else {
47
+ const shortDidDWNClient = Array.from(this.dwnClientMap.keys()).map(x => did_1.DID.from(x)).find(x => x.isShortDIDFor(did));
48
+ //Si ya existe un dwn transport polleando el short, no se debe pollear el DWN del longDID.
49
+ if (shortDidDWNClient)
50
+ return;
51
+ }
52
+ const didDocument = await this.resolver.resolve(did);
53
+ let dwnClient;
54
+ try {
55
+ const dwnEndpoint = this.getServiceUrl(didDocument, 'DecentralizedWebNode', 'nodes');
56
+ if (!dwnEndpoint)
57
+ return;
58
+ dwnClient = new dwn_client_1.DWNClient({
59
+ did: did.value,
60
+ storage: this.storage || exports.inMemoryMessageStorage,
61
+ inboxURL: dwnEndpoint[0],
62
+ });
63
+ }
64
+ catch (ex) {
65
+ console.error('An error occurred while polling for the DWN: DIDDocument has not a DWN service defined or it is not correct');
66
+ return;
67
+ }
68
+ this.dwnClientMap.set(did.value, dwnClient);
69
+ dwnClient.addSubscriber(async (messages) => {
70
+ messages.forEach((message) => {
71
+ //Los mensajes de DIDComm en el DWN vienen con caracteres extraños y no permiten JSON.parsear el string si no se remueven esos caracteres.
72
+ let messageManagerCompatible = false;
73
+ if (message.data.message) {
74
+ message.data = JSON.parse(message.data.message);
75
+ messageManagerCompatible = true;
76
+ }
77
+ if (typeof message.data === 'string' &&
78
+ message.data.indexOf('{') != 0 &&
79
+ message.data.indexOf('"header":{"alg":"ECDH-1PU') > -1) {
80
+ message.data = message.data.substring(message.data.indexOf('{'), message.data.lastIndexOf('}') + 1);
81
+ }
82
+ this.onMessageArrived.trigger({
83
+ from: null,
84
+ // from: messages[0].data?.message?.from,
85
+ data: message.data,
86
+ context: { ...message, messageManagerCompatible },
87
+ });
88
+ });
89
+ });
90
+ if (!initialzing) {
91
+ this.startPollSpecificClient(did.value, dwnClient);
92
+ }
93
+ });
94
+ }
95
+ async initialize(params) {
96
+ this.agent = params.agent;
97
+ this.resolver = this.agent.resolver;
98
+ const dids = this.agent.identity.getDIDs();
99
+ for (let did of dids) {
100
+ await this.processNewDID(did_1.DID.from(did), true);
101
+ }
102
+ Array.from(this.dwnClientMap.keys()).forEach(did => {
103
+ this.startPollSpecificClient(did, this.dwnClientMap.get(did));
104
+ });
105
+ this.agent.identity.didCreated.on((args) => {
106
+ this.processNewDID(args.did);
107
+ });
108
+ this.onMessageArrived.on(async (data) => {
109
+ await this.agent.transport.handleMessage(data, this);
110
+ });
111
+ }
112
+ async send(params) {
113
+ var _a, _b, _c;
114
+ const targetDidDocument = await this.resolver.resolve(params.to);
115
+ const dwnUrl = await did_core_1.DIDDocumentUtils.getServiceUrl(targetDidDocument, 'DecentralizedWebNode', 'nodes')[0];
116
+ const msgParams = {
117
+ targetDID: params.to.value,
118
+ targetInboxURL: dwnUrl,
119
+ message: {
120
+ data: ((_a = params.context) === null || _a === void 0 ? void 0 : _a.messageManagerCompatible)
121
+ ? { message: JSON.stringify(params.data) }
122
+ : params.data,
123
+ descriptor: {
124
+ method: undefined,
125
+ dateCreated: new Date(),
126
+ dataFormat: 'application/json',
127
+ },
128
+ },
129
+ };
130
+ if (!((_c = (_b = params.context) === null || _b === void 0 ? void 0 : _b.descriptor) === null || _c === void 0 ? void 0 : _c.method)) {
131
+ msgParams.message.descriptor.method = dwn_client_1.ThreadMethod.Create;
132
+ }
133
+ else {
134
+ msgParams.message.descriptor.method = dwn_client_1.ThreadMethod.Reply;
135
+ msgParams.message.descriptor.root =
136
+ params.context.descriptor.root || params.context.descriptor.objectId;
137
+ msgParams.message.descriptor.parent = params.context.descriptor.objectId;
138
+ }
139
+ await this.dwnClientMap
140
+ .get(this.agent.identity.getOperationalDID().value)
141
+ .sendMessage(msgParams)
142
+ .catch(console.error);
143
+ }
144
+ async startPollSpecificClient(did, dwnClient) {
145
+ try {
146
+ await dwnClient.pullNewMessageWait();
147
+ }
148
+ catch {
149
+ console.error("Error polling DWNClient for DID", did);
150
+ }
151
+ finally {
152
+ setTimeout(() => {
153
+ if (this.dwnClientMap.get(did)) {
154
+ this.startPollSpecificClient(did, dwnClient);
155
+ }
156
+ }, this.dwnPollMilliseconds);
157
+ }
158
+ }
159
+ getServiceUrl(didDocument, serviceType, serviceEndpointMapKey) {
160
+ var _a;
161
+ try {
162
+ const service = (_a = didDocument.service) === null || _a === void 0 ? void 0 : _a.find((service) => service.type === serviceType);
163
+ if (!service)
164
+ return null;
165
+ if (typeof service.serviceEndpoint === 'object')
166
+ return service.serviceEndpoint[serviceEndpointMapKey];
167
+ return [service.serviceEndpoint];
168
+ }
169
+ catch (error) {
170
+ console.error(error);
171
+ throw Error(`Error finding ${serviceType} service in DID Document`);
172
+ }
173
+ }
174
+ }
175
+ exports.DWNTransport = DWNTransport;
176
+ const messagesStorage = [];
177
+ let lastPullDate;
178
+ exports.inMemoryMessageStorage = {
179
+ async getMessages() {
180
+ return messagesStorage;
181
+ },
182
+ async getLastPullDate() {
183
+ return lastPullDate;
184
+ },
185
+ async updateLastPullDate(date) {
186
+ lastPullDate = date;
187
+ },
188
+ async saveMessages(messages) {
189
+ messagesStorage.push(...messages);
190
+ },
191
+ };
192
+ //# sourceMappingURL=dwn-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dwn-transport.js","sourceRoot":"","sources":["../../../src/models/transports/dwn-transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ITransport } from './transport';
2
+ export interface IMessagingTransport extends ITransport {
3
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=messaging-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messaging-transport.js","sourceRoot":"","sources":["../../../src/models/transports/messaging-transport.ts"],"names":[],"mappings":""}
@@ -0,0 +1,30 @@
1
+ import { Agent } from "../../agent";
2
+ import { ILiteEvent } from "../../utils/lite-event";
3
+ import { DID } from "../did";
4
+ export interface ITransport {
5
+ send(params: TransportSendRequest): any;
6
+ messageArrived: ILiteEvent<MessageArrivedEventArg>;
7
+ initialize(params: {
8
+ agent: Agent;
9
+ }): Promise<void>;
10
+ transportSupportedByTarget(params: {
11
+ targetDID: DID;
12
+ }): Promise<boolean>;
13
+ dispose(): Promise<void>;
14
+ }
15
+ export interface TransportSendRequest {
16
+ data: any;
17
+ from?: DID;
18
+ context?: any;
19
+ to: DID;
20
+ }
21
+ export interface MessageArrivedEventArg {
22
+ data: any;
23
+ from: DID;
24
+ context: any;
25
+ }
26
+ export interface ConnectedEventArg {
27
+ did: DID;
28
+ }
29
+ export type TransportInstance = new (params: any) => ITransport;
30
+ export declare function GetTransportByInstance(transports: ITransport[], instance: TransportInstance): ITransport;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetTransportByInstance = void 0;
4
+ function GetTransportByInstance(transports, instance) {
5
+ return transports.find(x => x instanceof instance);
6
+ }
7
+ exports.GetTransportByInstance = GetTransportByInstance;
8
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/models/transports/transport.ts"],"names":[],"mappings":";;;AA+BA,SAAgB,sBAAsB,CAAC,UAAwB,EAAE,QAA2B;IACxF,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,QAAQ,CAAC,CAAC;AACvD,CAAC;AAFD,wDAEC"}