@toon-protocol/connector 3.15.5 → 3.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/connector-admin-client.d.ts +61 -0
- package/dist/client/connector-admin-client.d.ts.map +1 -0
- package/dist/client/connector-admin-client.js +87 -0
- package/dist/client/connector-admin-client.js.map +1 -0
- package/dist/core/connector-node.d.ts +3 -0
- package/dist/core/connector-node.d.ts.map +1 -1
- package/dist/core/connector-node.js +138 -3
- package/dist/core/connector-node.js.map +1 -1
- package/dist/core/registry-db-schema.d.ts +5 -0
- package/dist/core/registry-db-schema.d.ts.map +1 -0
- package/dist/core/registry-db-schema.js +35 -0
- package/dist/core/registry-db-schema.js.map +1 -0
- package/dist/core/registry-store.d.ts +33 -0
- package/dist/core/registry-store.d.ts.map +1 -0
- package/dist/core/registry-store.js +103 -0
- package/dist/core/registry-store.js.map +1 -0
- package/dist/http/admin-api-inventory.d.ts.map +1 -1
- package/dist/http/admin-api-inventory.js +21 -0
- package/dist/http/admin-api-inventory.js.map +1 -1
- package/dist/http/admin-api.d.ts +14 -0
- package/dist/http/admin-api.d.ts.map +1 -1
- package/dist/http/admin-api.js +207 -4
- package/dist/http/admin-api.js.map +1 -1
- package/dist/http/admin-server.d.ts +2 -0
- package/dist/http/admin-server.d.ts.map +1 -1
- package/dist/http/admin-server.js +3 -1
- package/dist/http/admin-server.js.map +1 -1
- package/dist/lib.d.ts +2 -0
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +4 -1
- package/dist/lib.js.map +1 -1
- package/dist/routing/relation-route-validator.d.ts +15 -0
- package/dist/routing/relation-route-validator.d.ts.map +1 -0
- package/dist/routing/relation-route-validator.js +47 -0
- package/dist/routing/relation-route-validator.js.map +1 -0
- package/dist/routing/routing-table.d.ts +11 -0
- package/dist/routing/routing-table.d.ts.map +1 -1
- package/dist/routing/routing-table.js +6 -0
- package/dist/routing/routing-table.js.map +1 -1
- package/dist/settlement/mina-payment-channel-sdk.d.ts +18 -3
- package/dist/settlement/mina-payment-channel-sdk.d.ts.map +1 -1
- package/dist/settlement/mina-payment-channel-sdk.js +155 -10
- package/dist/settlement/mina-payment-channel-sdk.js.map +1 -1
- package/dist/settlement/provider/mina-payment-channel-provider.d.ts +3 -0
- package/dist/settlement/provider/mina-payment-channel-provider.d.ts.map +1 -1
- package/dist/settlement/provider/mina-payment-channel-provider.js +8 -1
- package/dist/settlement/provider/mina-payment-channel-provider.js.map +1 -1
- package/dist/settlement/provider/payment-channel-provider.d.ts +2 -0
- package/dist/settlement/provider/payment-channel-provider.d.ts.map +1 -1
- package/package.json +5 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-server.js","sourceRoot":"","sources":["../../src/http/admin-server.ts"],"names":[],"mappings":";;;AAkBA,2CAAgD;AAWhD,gEAA4D;AAuB5D,MAAa,WAAW;IACd,IAAI,CAAW;IACf,OAAO,GAAkB,IAAI,CAAC;IACrB,OAAO,CAAS;IAChB,OAAO,CAAiB;IACxB,OAAO,CAAS;IAChB,QAAQ,
|
|
1
|
+
{"version":3,"file":"admin-server.js","sourceRoot":"","sources":["../../src/http/admin-server.ts"],"names":[],"mappings":";;;AAkBA,2CAAgD;AAWhD,gEAA4D;AAuB5D,MAAa,WAAW;IACd,IAAI,CAAW;IACf,OAAO,GAAkB,IAAI,CAAC;IACrB,OAAO,CAAS;IAChB,OAAO,CAAiB;IACxB,OAAO,CAAS;IAChB,QAAQ,CA2BvB;IACe,cAAc,CAAsB;IAYrD,YAAY,OAuCX;QACC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,IAAI,QAAQ,CAAC;IAC1D,CAAC;IAKO,KAAK,CAAC,QAAQ;QACpB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,IAAA,kCAAe,EAChD,SAAS,EACT,wBAAwB,CACzB,CAAC;QAEF,MAAM,EACJ,YAAY,EACZ,gBAAgB,EAChB,MAAM,EACN,MAAM,EACN,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,wBAAwB,EACxB,YAAY,EACZ,OAAO,EACP,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,aAAa,GACd,GAAG,IAAI,CAAC,QAAQ,CAAC;QAElB,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC;QAGtB,MAAM,WAAW,GAAG,MAAM,IAAA,6BAAiB,EAAC;YAC1C,YAAY;YACZ,gBAAgB;YAChB,MAAM;YACN,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,eAAe;YACf,cAAc;YACd,iBAAiB;YACjB,cAAc;YACd,iBAAiB;YACjB,aAAa;YACb,iBAAiB;YACjB,wBAAwB;YACxB,YAAY;YACZ,OAAO;YACP,eAAe;YACf,iBAAiB;YACjB,oBAAoB;YACpB,sBAAsB;YACtB,aAAa,EAAE,IAAI,CAAC,cAAc;YAClC,eAAe;YACf,eAAe;YACf,aAAa;SACd,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAGrC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YACrC,GAAG,CAAC,IAAI,CAAC;gBACP,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,WAAW;gBACpB,MAAM,EAAE,IAAI,CAAC,OAAO;gBACpB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,IAAI,CACf;YACE,KAAK,EAAE,0BAA0B;YACjC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI;YACzB,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;YACjC,qBAAqB,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;YAC1E,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,KAAK;SACvC,EACD,0BAA0B,CAC3B,CAAC;IACJ,CAAC;IAcD,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC;QAC5C,MAAM,cAAc,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;QAEzD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC;gBACH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;oBAC/C,IAAI,CAAC,OAAO,CAAC,IAAI,CACf;wBACE,KAAK,EAAE,sBAAsB;wBAC7B,IAAI;wBACJ,IAAI;wBACJ,SAAS,EAAE;4BACT,kBAAkB;4BAClB,mBAAmB;4BACnB,6BAA6B;4BAC7B,mBAAmB;4BACnB,oBAAoB;4BACpB,8BAA8B;4BAC9B,sBAAsB;4BACtB,qBAAqB;4BACrB,gCAAgC;4BAChC,6BAA6B;4BAC7B,8BAA8B;4BAC9B,uCAAuC;4BACvC,sBAAsB;4BACtB,wBAAwB;yBACzB;qBACF,EACD,+BAA+B,IAAI,IAAI,IAAI,EAAE,CAC9C,CAAC;oBAGF,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;oBACrF,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC9E,IAAI,CAAC,OAAO,CAAC,IAAI,CACf;4BACE,KAAK,EAAE,mBAAmB;4BAC1B,IAAI;4BACJ,IAAI;yBACL,EACD,6BAA6B,IAAI,IAAI,IAAI,2BAA2B;4BAClE,qEAAqE,CACxE,CAAC;oBACJ,CAAC;oBAED,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;gBAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAA4B,EAAE,EAAE;oBACxD,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;wBAChC,MAAM,YAAY,GAAG,kBAAkB,IAAI,oBAAoB,CAAC;wBAChE,IAAI,CAAC,OAAO,CAAC,KAAK,CAChB;4BACE,KAAK,EAAE,2BAA2B;4BAClC,IAAI;4BACJ,KAAK,EAAE,YAAY;yBACpB,EACD,YAAY,CACb,CAAC;wBACF,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;oBAClC,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,OAAO,CAAC,KAAK,CAChB;4BACE,KAAK,EAAE,oBAAoB;4BAC3B,KAAK,EAAE,KAAK,CAAC,OAAO;yBACrB,EACD,oBAAoB,CACrB,CAAC;wBACF,MAAM,CAAC,KAAK,CAAC,CAAC;oBAChB,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,OAAO,CAAC,KAAK,CAChB;oBACE,KAAK,EAAE,8BAA8B;oBACrC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;iBAChE,EACD,8BAA8B,CAC/B,CAAC;gBACF,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAaD,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,OAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC5B,IAAI,KAAK,EAAE,CAAC;oBACV,IAAI,CAAC,OAAO,CAAC,KAAK,CAChB;wBACE,KAAK,EAAE,0BAA0B;wBACjC,KAAK,EAAE,KAAK,CAAC,OAAO;qBACrB,EACD,6BAA6B,CAC9B,CAAC;oBACF,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,OAAO,CAAC,IAAI,CACf;wBACE,KAAK,EAAE,sBAAsB;qBAC9B,EACD,0BAA0B,CAC3B,CAAC;oBACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;oBACpB,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAMD,OAAO;QACL,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;IACnC,CAAC;IAMD,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;IACzD,CAAC;CACF;AAhVD,kCAgVC"}
|
package/dist/lib.d.ts
CHANGED
|
@@ -15,6 +15,8 @@ import { UnifiedSettlementExecutor } from './settlement/unified-settlement-execu
|
|
|
15
15
|
import { createPaymentHandlerAdapter, REJECT_CODE_MAP, generatePaymentId, mapRejectCode, validateResponseData } from './core/payment-handler';
|
|
16
16
|
import { IlpSendHandler, validateIlpSendRequest } from './http/ilp-send-handler';
|
|
17
17
|
export { ConnectorNode, ConfigLoader, ConfigurationError, ConnectorNotStartedError, RoutingTable, PacketHandler, BTPServer, BTPClient, BTPClientManager, AdminServer, IlpHttpAdapter, evaluatePeerSecret, AccountManager, SettlementMonitor, UnifiedSettlementExecutor, createLogger, createPaymentHandlerAdapter, REJECT_CODE_MAP, generatePaymentId, mapRejectCode, validateResponseData, IlpSendHandler, validateIlpSendRequest, };
|
|
18
|
+
export { ConnectorAdminClient, ConnectorAdminError } from './client/connector-admin-client';
|
|
19
|
+
export type { ConnectorAdminClientOptions, RegisterPeerInput, AdminRouteInput, FetchLike, } from './client/connector-admin-client';
|
|
18
20
|
export type { ConnectorConfig, PeerConfig, RouteConfig, SettlementConfig, LocalDeliveryConfig, LocalDeliveryHandler, LocalDeliveryRequest, LocalDeliveryResponse, SendPacketParams, PeerRegistrationRequest, PeerInfo, PeerAccountBalance, RouteInfo, RemovePeerResult, IlpSendRequest, IlpSendResponse, TransportConfig, } from './config/types';
|
|
19
21
|
export type { AdminSettlementConfig } from './settlement/types';
|
|
20
22
|
export type { ChannelOpenOptions, ChannelMetadata } from './settlement/channel-manager';
|
package/dist/lib.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAI5D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EACL,2BAA2B,EAC3B,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAGjF,OAAO,EACL,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,wBAAwB,EACxB,YAAY,EACZ,aAAa,EACb,SAAS,EACT,SAAS,EACT,gBAAgB,EAGhB,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,yBAAyB,EACzB,YAAY,EAEZ,2BAA2B,EAC3B,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EAEpB,cAAc,EACd,sBAAsB,GACvB,CAAC;AAGF,YAAY,EACV,eAAe,EACf,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,uBAAuB,EACvB,QAAQ,EACR,kBAAkB,EAClB,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAGhE,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGxF,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG9F,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGzE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGjG,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACnE,YAAY,EACV,sBAAsB,EACtB,eAAe,EACf,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC"}
|
|
1
|
+
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAI5D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EACL,2BAA2B,EAC3B,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAGjF,OAAO,EACL,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,wBAAwB,EACxB,YAAY,EACZ,aAAa,EACb,SAAS,EACT,SAAS,EACT,gBAAgB,EAGhB,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,yBAAyB,EACzB,YAAY,EAEZ,2BAA2B,EAC3B,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EAEpB,cAAc,EACd,sBAAsB,GACvB,CAAC;AAGF,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC5F,YAAY,EACV,2BAA2B,EAC3B,iBAAiB,EACjB,eAAe,EACf,SAAS,GACV,MAAM,iCAAiC,CAAC;AAGzC,YAAY,EACV,eAAe,EACf,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,uBAAuB,EACvB,QAAQ,EACR,kBAAkB,EAClB,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAGhE,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGxF,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG9F,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGzE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGjG,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACnE,YAAY,EACV,sBAAsB,EACtB,eAAe,EACf,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC"}
|
package/dist/lib.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.validateIlpSendRequest = exports.IlpSendHandler = exports.validateResponseData = exports.mapRejectCode = exports.generatePaymentId = exports.REJECT_CODE_MAP = exports.createPaymentHandlerAdapter = exports.createLogger = exports.UnifiedSettlementExecutor = exports.SettlementMonitor = exports.AccountManager = exports.evaluatePeerSecret = exports.IlpHttpAdapter = exports.AdminServer = exports.BTPClientManager = exports.BTPClient = exports.BTPServer = exports.PacketHandler = exports.RoutingTable = exports.ConnectorNotStartedError = exports.ConfigurationError = exports.ConfigLoader = exports.ConnectorNode = void 0;
|
|
3
|
+
exports.ConnectorAdminError = exports.ConnectorAdminClient = exports.validateIlpSendRequest = exports.IlpSendHandler = exports.validateResponseData = exports.mapRejectCode = exports.generatePaymentId = exports.REJECT_CODE_MAP = exports.createPaymentHandlerAdapter = exports.createLogger = exports.UnifiedSettlementExecutor = exports.SettlementMonitor = exports.AccountManager = exports.evaluatePeerSecret = exports.IlpHttpAdapter = exports.AdminServer = exports.BTPClientManager = exports.BTPClient = exports.BTPServer = exports.PacketHandler = exports.RoutingTable = exports.ConnectorNotStartedError = exports.ConfigurationError = exports.ConfigLoader = exports.ConnectorNode = void 0;
|
|
4
4
|
const connector_node_1 = require("./core/connector-node");
|
|
5
5
|
Object.defineProperty(exports, "ConnectorNode", { enumerable: true, get: function () { return connector_node_1.ConnectorNode; } });
|
|
6
6
|
const config_loader_1 = require("./config/config-loader");
|
|
@@ -40,4 +40,7 @@ Object.defineProperty(exports, "validateResponseData", { enumerable: true, get:
|
|
|
40
40
|
const ilp_send_handler_1 = require("./http/ilp-send-handler");
|
|
41
41
|
Object.defineProperty(exports, "IlpSendHandler", { enumerable: true, get: function () { return ilp_send_handler_1.IlpSendHandler; } });
|
|
42
42
|
Object.defineProperty(exports, "validateIlpSendRequest", { enumerable: true, get: function () { return ilp_send_handler_1.validateIlpSendRequest; } });
|
|
43
|
+
var connector_admin_client_1 = require("./client/connector-admin-client");
|
|
44
|
+
Object.defineProperty(exports, "ConnectorAdminClient", { enumerable: true, get: function () { return connector_admin_client_1.ConnectorAdminClient; } });
|
|
45
|
+
Object.defineProperty(exports, "ConnectorAdminError", { enumerable: true, get: function () { return connector_admin_client_1.ConnectorAdminError; } });
|
|
43
46
|
//# sourceMappingURL=lib.js.map
|
package/dist/lib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":";;;AAMA,0DAAsD;AA4BpD,8FA5BO,8BAAa,OA4BP;AA3Bf,0DAAoG;AA4BlG,6FA5BO,4BAAY,OA4BP;AACZ,mGA7BqB,kCAAkB,OA6BrB;AAClB,yGA9ByC,wCAAwB,OA8BzC;AA7B1B,2CAA8C;AA2C5C,6FA3CO,qBAAY,OA2CP;AA1Cd,2DAAuD;AA6BrD,6FA7BO,4BAAY,OA6BP;AA5Bd,0DAAsD;AA6BpD,8FA7BO,8BAAa,OA6BP;AA5Bf,iDAA6C;AA6B3C,0FA7BO,sBAAS,OA6BP;AA5BX,iDAA6C;AA6B3C,0FA7BO,sBAAS,OA6BP;AA5BX,iEAA4D;AA6B1D,iGA7BO,qCAAgB,OA6BP;AAzBlB,sDAAkD;AA4BhD,4FA5BO,0BAAW,OA4BP;AA3Bb,8DAAyD;AA4BvD,+FA5BO,iCAAc,OA4BP;AA3BhB,sEAAiE;AA4B/D,mGA5BO,yCAAkB,OA4BP;AA3BpB,kEAA8D;AA4B5D,+FA5BO,gCAAc,OA4BP;AA3BhB,wEAAoE;AA4BlE,kGA5BO,sCAAiB,OA4BP;AA3BnB,0FAAqF;AA4BnF,0GA5BO,uDAAyB,OA4BP;AA3B3B,4DAMgC;AAwB9B,4GA7BA,6CAA2B,OA6BA;AAC3B,gGA7BA,iCAAe,OA6BA;AACf,kGA7BA,mCAAiB,OA6BA;AACjB,8FA7BA,+BAAa,OA6BA;AACb,qGA7BA,sCAAoB,OA6BA;AA3BtB,8DAAiF;AA6B/E,+FA7BO,iCAAc,OA6BP;AACd,uGA9BuB,yCAAsB,OA8BvB"}
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":";;;AAMA,0DAAsD;AA4BpD,8FA5BO,8BAAa,OA4BP;AA3Bf,0DAAoG;AA4BlG,6FA5BO,4BAAY,OA4BP;AACZ,mGA7BqB,kCAAkB,OA6BrB;AAClB,yGA9ByC,wCAAwB,OA8BzC;AA7B1B,2CAA8C;AA2C5C,6FA3CO,qBAAY,OA2CP;AA1Cd,2DAAuD;AA6BrD,6FA7BO,4BAAY,OA6BP;AA5Bd,0DAAsD;AA6BpD,8FA7BO,8BAAa,OA6BP;AA5Bf,iDAA6C;AA6B3C,0FA7BO,sBAAS,OA6BP;AA5BX,iDAA6C;AA6B3C,0FA7BO,sBAAS,OA6BP;AA5BX,iEAA4D;AA6B1D,iGA7BO,qCAAgB,OA6BP;AAzBlB,sDAAkD;AA4BhD,4FA5BO,0BAAW,OA4BP;AA3Bb,8DAAyD;AA4BvD,+FA5BO,iCAAc,OA4BP;AA3BhB,sEAAiE;AA4B/D,mGA5BO,yCAAkB,OA4BP;AA3BpB,kEAA8D;AA4B5D,+FA5BO,gCAAc,OA4BP;AA3BhB,wEAAoE;AA4BlE,kGA5BO,sCAAiB,OA4BP;AA3BnB,0FAAqF;AA4BnF,0GA5BO,uDAAyB,OA4BP;AA3B3B,4DAMgC;AAwB9B,4GA7BA,6CAA2B,OA6BA;AAC3B,gGA7BA,iCAAe,OA6BA;AACf,kGA7BA,mCAAiB,OA6BA;AACjB,8FA7BA,+BAAa,OA6BA;AACb,qGA7BA,sCAAoB,OA6BA;AA3BtB,8DAAiF;AA6B/E,+FA7BO,iCAAc,OA6BP;AACd,uGA9BuB,yCAAsB,OA8BvB;AAIxB,0EAA4F;AAAnF,8HAAA,oBAAoB,OAAA;AAAE,6HAAA,mBAAmB,OAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { PeerRelation } from '@toon-protocol/shared';
|
|
2
|
+
import type { RoutingTableEntry } from '@toon-protocol/shared';
|
|
3
|
+
export type RelationRouteValidation = {
|
|
4
|
+
ok: true;
|
|
5
|
+
} | {
|
|
6
|
+
ok: false;
|
|
7
|
+
error: string;
|
|
8
|
+
};
|
|
9
|
+
export declare function deriveLocalPrefixes(routes: Array<Pick<RoutingTableEntry, 'prefix' | 'nextHop'>>, nodeId: string): string[];
|
|
10
|
+
export declare function validateRelationRoute(relation: PeerRelation | undefined, localPrefixes: string[], routePrefixes: string[]): RelationRouteValidation;
|
|
11
|
+
export declare function deriveDefaultChildRoute(relation: PeerRelation | undefined, localPrefixes: string[], peerId: string): {
|
|
12
|
+
prefix: string;
|
|
13
|
+
priority: number;
|
|
14
|
+
} | null;
|
|
15
|
+
//# sourceMappingURL=relation-route-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relation-route-validator.d.ts","sourceRoot":"","sources":["../../src/routing/relation-route-validator.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG/D,MAAM,MAAM,uBAAuB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAMlF,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,GAAG,SAAS,CAAC,CAAC,EAC5D,MAAM,EAAE,MAAM,GACb,MAAM,EAAE,CAEV;AAqBD,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,YAAY,GAAG,SAAS,EAClC,aAAa,EAAE,MAAM,EAAE,EACvB,aAAa,EAAE,MAAM,EAAE,GACtB,uBAAuB,CA+BzB;AAQD,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,YAAY,GAAG,SAAS,EAClC,aAAa,EAAE,MAAM,EAAE,EACvB,MAAM,EAAE,MAAM,GACb;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAK7C"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.deriveLocalPrefixes = deriveLocalPrefixes;
|
|
4
|
+
exports.validateRelationRoute = validateRelationRoute;
|
|
5
|
+
exports.deriveDefaultChildRoute = deriveDefaultChildRoute;
|
|
6
|
+
function deriveLocalPrefixes(routes, nodeId) {
|
|
7
|
+
return routes.filter((r) => r.nextHop === nodeId || r.nextHop === 'local').map((r) => r.prefix);
|
|
8
|
+
}
|
|
9
|
+
function isStrictDescendant(candidate, ancestor) {
|
|
10
|
+
return candidate.startsWith(ancestor + '.');
|
|
11
|
+
}
|
|
12
|
+
function validateRelationRoute(relation, localPrefixes, routePrefixes) {
|
|
13
|
+
const effectiveRelation = relation ?? 'peer';
|
|
14
|
+
if (localPrefixes.length === 0 || routePrefixes.length === 0) {
|
|
15
|
+
return { ok: true };
|
|
16
|
+
}
|
|
17
|
+
if (effectiveRelation === 'child') {
|
|
18
|
+
for (const prefix of routePrefixes) {
|
|
19
|
+
const underSelf = localPrefixes.some((self) => isStrictDescendant(prefix, self));
|
|
20
|
+
if (!underSelf) {
|
|
21
|
+
return {
|
|
22
|
+
ok: false,
|
|
23
|
+
error: `Invalid route for child peer: prefix '${prefix}' must be under the connector's own address (one of: ${localPrefixes.join(', ')})`,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (effectiveRelation === 'parent') {
|
|
29
|
+
for (const prefix of routePrefixes) {
|
|
30
|
+
const underSelf = localPrefixes.some((self) => isStrictDescendant(prefix, self));
|
|
31
|
+
if (underSelf) {
|
|
32
|
+
return {
|
|
33
|
+
ok: false,
|
|
34
|
+
error: `Invalid route for parent peer: prefix '${prefix}' must not be under the connector's own address subtree (one of: ${localPrefixes.join(', ')})`,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return { ok: true };
|
|
40
|
+
}
|
|
41
|
+
function deriveDefaultChildRoute(relation, localPrefixes, peerId) {
|
|
42
|
+
if (relation !== 'child' || localPrefixes.length === 0) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
return { prefix: `${localPrefixes[0]}.${peerId}`, priority: 0 };
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=relation-route-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relation-route-validator.js","sourceRoot":"","sources":["../../src/routing/relation-route-validator.ts"],"names":[],"mappings":";;AA6BA,kDAKC;AAqBD,sDAmCC;AAQD,0DASC;AA9ED,SAAgB,mBAAmB,CACjC,MAA4D,EAC5D,MAAc;IAEd,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAClG,CAAC;AAGD,SAAS,kBAAkB,CAAC,SAAiB,EAAE,QAAgB;IAC7D,OAAO,SAAS,CAAC,UAAU,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;AAC9C,CAAC;AAgBD,SAAgB,qBAAqB,CACnC,QAAkC,EAClC,aAAuB,EACvB,aAAuB;IAEvB,MAAM,iBAAiB,GAAG,QAAQ,IAAI,MAAM,CAAC;IAC7C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7D,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAED,IAAI,iBAAiB,KAAK,OAAO,EAAE,CAAC;QAClC,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;YACjF,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE,yCAAyC,MAAM,wDAAwD,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;iBAC1I,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,iBAAiB,KAAK,QAAQ,EAAE,CAAC;QACnC,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;YACjF,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE,0CAA0C,MAAM,oEAAoE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;iBACvJ,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC;AAQD,SAAgB,uBAAuB,CACrC,QAAkC,EAClC,aAAuB,EACvB,MAAc;IAEd,IAAI,QAAQ,KAAK,OAAO,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AAClE,CAAC"}
|
|
@@ -1,12 +1,23 @@
|
|
|
1
1
|
import { ILPAddress, RoutingTableEntry } from '@toon-protocol/shared';
|
|
2
|
+
export interface RoutePersistenceSink {
|
|
3
|
+
saveRoute(record: {
|
|
4
|
+
prefix: string;
|
|
5
|
+
nextHop: string;
|
|
6
|
+
priority: number;
|
|
7
|
+
source: 'runtime';
|
|
8
|
+
}): void;
|
|
9
|
+
deleteRoute(prefix: string): void;
|
|
10
|
+
}
|
|
2
11
|
export declare class RoutingTable {
|
|
3
12
|
private readonly routes;
|
|
4
13
|
private readonly logger?;
|
|
14
|
+
private persistence?;
|
|
5
15
|
constructor(initialRoutes?: RoutingTableEntry[], logger?: {
|
|
6
16
|
info: (obj: object, msg?: string) => void;
|
|
7
17
|
error: (obj: object, msg?: string) => void;
|
|
8
18
|
});
|
|
9
19
|
addRoute(prefix: ILPAddress, nextHop: string, priority?: number): void;
|
|
20
|
+
setPersistence(sink: RoutePersistenceSink): void;
|
|
10
21
|
removeRoute(prefix: string): void;
|
|
11
22
|
getNextHop(destination: ILPAddress): string | null;
|
|
12
23
|
getAllRoutes(): RoutingTableEntry[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routing-table.d.ts","sourceRoot":"","sources":["../../src/routing/routing-table.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAqB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"routing-table.d.ts","sourceRoot":"","sources":["../../src/routing/routing-table.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAqB,MAAM,uBAAuB,CAAC;AAOzF,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE,GAAG,IAAI,CAAC;IAClG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAqBD,qBAAa,YAAY;IAMvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;IAQxD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAGtB;IAUF,OAAO,CAAC,WAAW,CAAC,CAAuB;gBASzC,aAAa,CAAC,EAAE,iBAAiB,EAAE,EACnC,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;QAC1C,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;KAC5C;IA0BH,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,GAAG,IAAI;IAkBzE,cAAc,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI;IAWhD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAgCjC,UAAU,CAAC,WAAW,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI;IA+BlD,YAAY,IAAI,iBAAiB,EAAE;IAYnC,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
|
|
@@ -5,6 +5,7 @@ const shared_1 = require("@toon-protocol/shared");
|
|
|
5
5
|
class RoutingTable {
|
|
6
6
|
routes;
|
|
7
7
|
logger;
|
|
8
|
+
persistence;
|
|
8
9
|
constructor(initialRoutes, logger) {
|
|
9
10
|
this.routes = new Map();
|
|
10
11
|
this.logger = logger;
|
|
@@ -23,11 +24,16 @@ class RoutingTable {
|
|
|
23
24
|
}
|
|
24
25
|
const entry = { prefix, nextHop, priority };
|
|
25
26
|
this.routes.set(prefix, entry);
|
|
27
|
+
this.persistence?.saveRoute({ prefix, nextHop, priority: priority ?? 0, source: 'runtime' });
|
|
26
28
|
this.logger?.info({ prefix, nextHop, priority }, `Added route: ${prefix} -> ${nextHop}`);
|
|
27
29
|
}
|
|
30
|
+
setPersistence(sink) {
|
|
31
|
+
this.persistence = sink;
|
|
32
|
+
}
|
|
28
33
|
removeRoute(prefix) {
|
|
29
34
|
const existed = this.routes.has(prefix);
|
|
30
35
|
this.routes.delete(prefix);
|
|
36
|
+
this.persistence?.deleteRoute(prefix);
|
|
31
37
|
if (existed) {
|
|
32
38
|
this.logger?.info({ prefix }, `Removed route: ${prefix}`);
|
|
33
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routing-table.js","sourceRoot":"","sources":["../../src/routing/routing-table.ts"],"names":[],"mappings":";;;AAMA,kDAAyF;
|
|
1
|
+
{"version":3,"file":"routing-table.js","sourceRoot":"","sources":["../../src/routing/routing-table.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,6 +37,7 @@ export interface MinaTxResult {
|
|
|
37
37
|
export interface MinaSubscription {
|
|
38
38
|
unsubscribe(): void;
|
|
39
39
|
}
|
|
40
|
+
export declare const EXPECTED_USDC_DECIMALS = 6;
|
|
40
41
|
export declare const DEFAULT_MINA_TX_FEE_NANOMINA = 100000000n;
|
|
41
42
|
export declare function _resetModuleCaches(): void;
|
|
42
43
|
export declare class MinaPaymentChannelSDK {
|
|
@@ -50,27 +51,41 @@ export declare class MinaPaymentChannelSDK {
|
|
|
50
51
|
private _networkInitialized;
|
|
51
52
|
private readonly _participantCache;
|
|
52
53
|
private readonly _channelHashCache;
|
|
54
|
+
private readonly _channelKeyCache;
|
|
55
|
+
private _tokenContext;
|
|
53
56
|
private readonly _txFee;
|
|
54
|
-
|
|
57
|
+
private readonly _tokenAddress?;
|
|
58
|
+
private readonly _configuredTokenId?;
|
|
59
|
+
constructor(graphqlUrl: string, _zkAppAddress: string, _logger: Logger, _signerPrivateKey?: string | undefined, txFeeNanomina?: bigint, tokenConfig?: {
|
|
60
|
+
tokenAddress?: string;
|
|
61
|
+
tokenId?: string;
|
|
62
|
+
});
|
|
63
|
+
get isUsdcToken(): boolean;
|
|
55
64
|
private _feePayer;
|
|
56
65
|
private _requireSignerKey;
|
|
57
66
|
private _setNetwork;
|
|
58
67
|
private _getZkApp;
|
|
59
68
|
private _waitForAccount;
|
|
60
69
|
private _resolveChannelHash;
|
|
70
|
+
private _getTokenContext;
|
|
71
|
+
private _assertTokenDecimals;
|
|
72
|
+
assertClaimTokenId(claimTokenId: string): Promise<void>;
|
|
61
73
|
private _wrapError;
|
|
62
74
|
private _deserializeSignature;
|
|
63
75
|
private _normalizeSerializedProof;
|
|
64
76
|
getSignerPublicKey(): Promise<string>;
|
|
65
77
|
compileContract(): Promise<void>;
|
|
66
78
|
openChannel(participantA: string, participantB: string, timeout: number, tokenId?: string): Promise<MinaOpenChannelResult>;
|
|
67
|
-
deposit(channelAddress: string, amount: bigint): Promise<MinaTxResult>;
|
|
79
|
+
deposit(channelAddress: string, amount: bigint, fundChannelTokenAccount?: boolean): Promise<MinaTxResult>;
|
|
68
80
|
claimFromChannel(channelAddress: string, newBalanceA: bigint, newBalanceB: bigint, salt: bigint, nonce: bigint, signatureA: string, signatureB: string, participantKeys?: {
|
|
69
81
|
participant1: string;
|
|
70
82
|
participant2: string;
|
|
71
83
|
}): Promise<MinaTxResult>;
|
|
72
84
|
closeChannel(channelAddress: string, finalBalanceA: bigint, finalBalanceB: bigint, salt: bigint, nonce: bigint, signatureA: string, signatureB: string): Promise<MinaTxResult>;
|
|
73
|
-
settleChannel(channelAddress: string, balanceA: bigint, balanceB: bigint, salt: bigint, participantA: string, participantB: string, nonce: bigint
|
|
85
|
+
settleChannel(channelAddress: string, balanceA: bigint, balanceB: bigint, salt: bigint, participantA: string, participantB: string, nonce: bigint, options?: {
|
|
86
|
+
fundParticipantTokenAccounts?: number;
|
|
87
|
+
channelPrivateKey?: string;
|
|
88
|
+
}): Promise<MinaTxResult>;
|
|
74
89
|
getChannelState(channelAddress: string): Promise<MinaChannelState>;
|
|
75
90
|
getChannelEvents(channelAddress: string): Promise<Array<{
|
|
76
91
|
type: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mina-payment-channel-sdk.d.ts","sourceRoot":"","sources":["../../src/settlement/mina-payment-channel-sdk.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAW9C,MAAM,WAAW,gBAAgB;IAE/B,YAAY,EAAE,MAAM,CAAC;IAErB,YAAY,EAAE,MAAM,CAAC;IAErB,YAAY,EAAE,MAAM,CAAC;IAErB,YAAY,EAAE,MAAM,CAAC;IAErB,iBAAiB,EAAE,MAAM,CAAC;IAE1B,UAAU,EAAE,MAAM,CAAC;IAEnB,YAAY,EAAE,MAAM,CAAC;IAErB,iBAAiB,EAAE,MAAM,CAAC;IAE1B,OAAO,EAAE,MAAM,CAAC;IAEhB,WAAW,EAAE,MAAM,CAAC;CACrB;AAOD,eAAO,MAAM,gBAAgB;;;;;;;;;;CAUnB,CAAC;AAKX,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAO7D;AAOD,MAAM,WAAW,qBAAqB;IAEpC,YAAY,EAAE,MAAM,CAAC;IAErB,MAAM,EAAE,MAAM,CAAC;CAChB;AAGD,MAAM,WAAW,YAAY;IAE3B,MAAM,EAAE,MAAM,CAAC;CAChB;AAGD,MAAM,WAAW,gBAAgB;IAE/B,WAAW,IAAI,IAAI,CAAC;CACrB;
|
|
1
|
+
{"version":3,"file":"mina-payment-channel-sdk.d.ts","sourceRoot":"","sources":["../../src/settlement/mina-payment-channel-sdk.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAW9C,MAAM,WAAW,gBAAgB;IAE/B,YAAY,EAAE,MAAM,CAAC;IAErB,YAAY,EAAE,MAAM,CAAC;IAErB,YAAY,EAAE,MAAM,CAAC;IAErB,YAAY,EAAE,MAAM,CAAC;IAErB,iBAAiB,EAAE,MAAM,CAAC;IAE1B,UAAU,EAAE,MAAM,CAAC;IAEnB,YAAY,EAAE,MAAM,CAAC;IAErB,iBAAiB,EAAE,MAAM,CAAC;IAE1B,OAAO,EAAE,MAAM,CAAC;IAEhB,WAAW,EAAE,MAAM,CAAC;CACrB;AAOD,eAAO,MAAM,gBAAgB;;;;;;;;;;CAUnB,CAAC;AAKX,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAO7D;AAOD,MAAM,WAAW,qBAAqB;IAEpC,YAAY,EAAE,MAAM,CAAC;IAErB,MAAM,EAAE,MAAM,CAAC;CAChB;AAGD,MAAM,WAAW,YAAY;IAE3B,MAAM,EAAE,MAAM,CAAC;CAChB;AAGD,MAAM,WAAW,gBAAgB;IAE/B,WAAW,IAAI,IAAI,CAAC;CACrB;AAkGD,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAaxC,eAAO,MAAM,4BAA4B,aAAe,CAAC;AAwBzD,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC;AAkBD,qBAAa,qBAAqB;IAyF9B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAzFrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAG5B,OAAO,CAAC,SAAS,CAAS;IAI1B,OAAO,CAAC,gBAAgB,CAAa;IAOrC,IAAI,eAAe,IAAI,GAAG,CAEzB;IAGD,OAAO,CAAC,mBAAmB,CAAS;IAGpC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAG9B;IAUJ,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA6B;IAc/D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6B;IAU9D,OAAO,CAAC,aAAa,CAAgD;IASrE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAQhC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAS;IAOxC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAS;gBAG3C,UAAU,EAAE,MAAM,EACD,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,iBAAiB,CAAC,EAAE,MAAM,YAAA,EAC3C,aAAa,GAAE,MAAqC,EACpD,WAAW,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAY3D,IAAI,WAAW,IAAI,OAAO,CAEzB;IAWD,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,iBAAiB;YAgBX,WAAW;YAcX,SAAS;YAqCT,eAAe;YAqCf,mBAAmB;YA4BnB,gBAAgB;YAuDhB,oBAAoB;IAsD5B,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB7D,OAAO,CAAC,UAAU;IAgClB,OAAO,CAAC,qBAAqB;IA2D7B,OAAO,CAAC,yBAAyB;IA2B3B,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IAkBrC,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IA2ChC,WAAW,CACf,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,qBAAqB,CAAC;IA4H3B,OAAO,CACX,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,EACd,uBAAuB,UAAO,GAC7B,OAAO,CAAC,YAAY,CAAC;IAmFlB,gBAAgB,CACpB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,eAAe,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,GAC/D,OAAO,CAAC,YAAY,CAAC;IA8IlB,YAAY,CAChB,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,CAAC;IA0DlB,aAAa,CACjB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,4BAA4B,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAAE,GAC9E,OAAO,CAAC,YAAY,CAAC;IA4GlB,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAiElE,gBAAgB,CACpB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IAqC5D,gBAAgB,CACpB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC;IA4FZ,kBAAkB,CACtB,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE,MAAM,EACzB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,OAAO,CAAC;IAyKnB,kBAAkB,CAChB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,EAC3C,cAAc,GAAE,MAAiC,GAChD,gBAAgB;CAsDpB"}
|
|
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.MinaPaymentChannelSDK = exports.DEFAULT_MINA_TX_FEE_NANOMINA = exports.MinaChannelError = exports.MINA_ERROR_CODES = void 0;
|
|
36
|
+
exports.MinaPaymentChannelSDK = exports.DEFAULT_MINA_TX_FEE_NANOMINA = exports.EXPECTED_USDC_DECIMALS = exports.MinaChannelError = exports.MINA_ERROR_CODES = void 0;
|
|
37
37
|
exports._resetModuleCaches = _resetModuleCaches;
|
|
38
38
|
exports.MINA_ERROR_CODES = {
|
|
39
39
|
COMPILE_FAILED: 1001,
|
|
@@ -84,6 +84,20 @@ async function getPaymentChannelContract() {
|
|
|
84
84
|
}
|
|
85
85
|
return PaymentChannelContract;
|
|
86
86
|
}
|
|
87
|
+
let FungibleTokenContract = null;
|
|
88
|
+
async function getFungibleTokenContract() {
|
|
89
|
+
if (!FungibleTokenContract) {
|
|
90
|
+
try {
|
|
91
|
+
const mod = await Promise.resolve().then(() => __importStar(require('mina-fungible-token')));
|
|
92
|
+
FungibleTokenContract = mod.FungibleToken;
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
throw new MinaChannelError('mina-fungible-token is required for USDC-token Mina payment channels but is not installed.', exports.MINA_ERROR_CODES.O1JS_NOT_AVAILABLE, 'O1JS_NOT_AVAILABLE');
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return FungibleTokenContract;
|
|
99
|
+
}
|
|
100
|
+
exports.EXPECTED_USDC_DECIMALS = 6;
|
|
87
101
|
const DEFAULT_POLL_INTERVAL_MS = 30_000;
|
|
88
102
|
exports.DEFAULT_MINA_TX_FEE_NANOMINA = 100000000n;
|
|
89
103
|
const DEFAULT_DEPLOY_CONFIRMATION_TIMEOUT_MS = 300_000;
|
|
@@ -91,6 +105,7 @@ const DEPLOY_CONFIRMATION_POLL_INTERVAL_MS = 3_000;
|
|
|
91
105
|
function _resetModuleCaches() {
|
|
92
106
|
o1jsModule = null;
|
|
93
107
|
PaymentChannelContract = null;
|
|
108
|
+
FungibleTokenContract = null;
|
|
94
109
|
}
|
|
95
110
|
class MinaPaymentChannelSDK {
|
|
96
111
|
_zkAppAddress;
|
|
@@ -105,13 +120,22 @@ class MinaPaymentChannelSDK {
|
|
|
105
120
|
_networkInitialized = false;
|
|
106
121
|
_participantCache = new Map();
|
|
107
122
|
_channelHashCache = new Map();
|
|
123
|
+
_channelKeyCache = new Map();
|
|
124
|
+
_tokenContext = null;
|
|
108
125
|
_txFee;
|
|
109
|
-
|
|
126
|
+
_tokenAddress;
|
|
127
|
+
_configuredTokenId;
|
|
128
|
+
constructor(graphqlUrl, _zkAppAddress, _logger, _signerPrivateKey, txFeeNanomina = exports.DEFAULT_MINA_TX_FEE_NANOMINA, tokenConfig) {
|
|
110
129
|
this._zkAppAddress = _zkAppAddress;
|
|
111
130
|
this._logger = _logger;
|
|
112
131
|
this._signerPrivateKey = _signerPrivateKey;
|
|
113
132
|
this.graphqlUrl = graphqlUrl;
|
|
114
133
|
this._txFee = txFeeNanomina;
|
|
134
|
+
this._tokenAddress = tokenConfig?.tokenAddress;
|
|
135
|
+
this._configuredTokenId = tokenConfig?.tokenId;
|
|
136
|
+
}
|
|
137
|
+
get isUsdcToken() {
|
|
138
|
+
return this._tokenAddress !== undefined && this._tokenAddress !== '';
|
|
115
139
|
}
|
|
116
140
|
_feePayer(sender) {
|
|
117
141
|
return { sender, fee: this._txFee.toString() };
|
|
@@ -168,6 +192,69 @@ class MinaPaymentChannelSDK {
|
|
|
168
192
|
this._channelHashCache.set(channelAddress, channelHash);
|
|
169
193
|
return channelHash;
|
|
170
194
|
}
|
|
195
|
+
async _getTokenContext() {
|
|
196
|
+
if (!this.isUsdcToken || !this._tokenAddress) {
|
|
197
|
+
throw new MinaChannelError('USDC token operations require a configured token-owner address ' +
|
|
198
|
+
'(MinaProviderConfig.tokenAddress), but none was provided.', exports.MINA_ERROR_CODES.INVALID_PARAMETERS, 'INVALID_PARAMETERS');
|
|
199
|
+
}
|
|
200
|
+
if (this._tokenContext) {
|
|
201
|
+
return this._tokenContext;
|
|
202
|
+
}
|
|
203
|
+
const { PublicKey } = await getO1js();
|
|
204
|
+
const FungibleToken = await getFungibleTokenContract();
|
|
205
|
+
await this._setNetwork();
|
|
206
|
+
const tokenOwnerKey = PublicKey.fromBase58(this._tokenAddress);
|
|
207
|
+
const token = new FungibleToken(tokenOwnerKey);
|
|
208
|
+
const tokenId = token.deriveTokenId().toString();
|
|
209
|
+
if (this._configuredTokenId !== undefined && this._configuredTokenId !== tokenId) {
|
|
210
|
+
throw new MinaChannelError(`Configured Mina tokenId (${this._configuredTokenId}) does not match the tokenId derived ` +
|
|
211
|
+
`from the configured token-owner address ${this._tokenAddress} (${tokenId}). ` +
|
|
212
|
+
'Check MinaProviderConfig.tokenAddress / tokenId (#192).', exports.MINA_ERROR_CODES.INVALID_PARAMETERS, 'INVALID_PARAMETERS');
|
|
213
|
+
}
|
|
214
|
+
this._tokenContext = { token, tokenId };
|
|
215
|
+
return this._tokenContext;
|
|
216
|
+
}
|
|
217
|
+
async _assertTokenDecimals() {
|
|
218
|
+
const { token } = await this._getTokenContext();
|
|
219
|
+
const { fetchAccount, PublicKey } = await getO1js();
|
|
220
|
+
try {
|
|
221
|
+
await fetchAccount({ publicKey: PublicKey.fromBase58(this._tokenAddress) });
|
|
222
|
+
let decimals;
|
|
223
|
+
if (typeof token.getDecimals === 'function') {
|
|
224
|
+
decimals = Number(token.getDecimals().toString());
|
|
225
|
+
}
|
|
226
|
+
else if (token.decimals && typeof token.decimals.get === 'function') {
|
|
227
|
+
decimals = Number(token.decimals.get().toString());
|
|
228
|
+
}
|
|
229
|
+
if (decimals === undefined) {
|
|
230
|
+
this._logger.warn({ event: 'token_decimals_unreadable', tokenAddress: this._tokenAddress }, 'Could not read USDC token decimals; skipping the decimals==6 assertion');
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
if (decimals !== exports.EXPECTED_USDC_DECIMALS) {
|
|
234
|
+
throw new MinaChannelError(`Configured Mina USDC token reports ${decimals} decimals, but ${exports.EXPECTED_USDC_DECIMALS} ` +
|
|
235
|
+
'are required for cross-chain base-unit parity (#192). Refusing to settle.', exports.MINA_ERROR_CODES.INVALID_PARAMETERS, 'INVALID_PARAMETERS');
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
catch (err) {
|
|
239
|
+
if (err instanceof MinaChannelError)
|
|
240
|
+
throw err;
|
|
241
|
+
this._logger.warn({
|
|
242
|
+
event: 'token_decimals_check_failed',
|
|
243
|
+
tokenAddress: this._tokenAddress,
|
|
244
|
+
error: err instanceof Error ? err.message : String(err),
|
|
245
|
+
}, 'USDC token decimals check failed to read; proceeding (tokenId match still enforced)');
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
async assertClaimTokenId(claimTokenId) {
|
|
249
|
+
if (!this.isUsdcToken) {
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
const { tokenId } = await this._getTokenContext();
|
|
253
|
+
if (claimTokenId !== tokenId) {
|
|
254
|
+
throw new MinaChannelError(`Inbound Mina claim tokenId (${claimTokenId}) does not match this channel's configured ` +
|
|
255
|
+
`USDC tokenId (${tokenId}). The claim is for a different token (#192).`, exports.MINA_ERROR_CODES.INVALID_PARAMETERS, 'INVALID_PARAMETERS');
|
|
256
|
+
}
|
|
257
|
+
}
|
|
171
258
|
_wrapError(err, code, errorName) {
|
|
172
259
|
if (err instanceof MinaChannelError) {
|
|
173
260
|
return err;
|
|
@@ -262,7 +349,16 @@ class MinaPaymentChannelSDK {
|
|
|
262
349
|
const pubB = PublicKey.fromBase58(participantB);
|
|
263
350
|
const nonce = Field(0);
|
|
264
351
|
const timeoutField = Field(timeout);
|
|
265
|
-
|
|
352
|
+
let resolvedTokenId;
|
|
353
|
+
if (this.isUsdcToken) {
|
|
354
|
+
const ctx = await this._getTokenContext();
|
|
355
|
+
resolvedTokenId = ctx.tokenId;
|
|
356
|
+
await this._assertTokenDecimals();
|
|
357
|
+
}
|
|
358
|
+
else {
|
|
359
|
+
resolvedTokenId = tokenId ?? '1';
|
|
360
|
+
}
|
|
361
|
+
const tokenIdField = Field(resolvedTokenId);
|
|
266
362
|
const deployTxn = await Mina.transaction(this._feePayer(signerPublicKey), async () => {
|
|
267
363
|
AccountUpdate.fundNewAccount(signerPublicKey);
|
|
268
364
|
await zkApp.deploy();
|
|
@@ -280,6 +376,7 @@ class MinaPaymentChannelSDK {
|
|
|
280
376
|
const initTx = await initTxn.sign([signerPrivateKey]).send();
|
|
281
377
|
const txHash = initTx.hash ?? '';
|
|
282
378
|
this._participantCache.set(zkAppAddress, { participantA, participantB });
|
|
379
|
+
this._channelKeyCache.set(zkAppAddress, zkAppPrivateKey.toBase58());
|
|
283
380
|
this._logger.info({ event: 'open_channel', zkAppAddress, deployTxHash, txHash }, 'Mina payment channel opened');
|
|
284
381
|
return { zkAppAddress, txHash };
|
|
285
382
|
}
|
|
@@ -287,23 +384,41 @@ class MinaPaymentChannelSDK {
|
|
|
287
384
|
throw this._wrapError(err, exports.MINA_ERROR_CODES.TRANSACTION_FAILED, 'TRANSACTION_FAILED');
|
|
288
385
|
}
|
|
289
386
|
}
|
|
290
|
-
async deposit(channelAddress, amount) {
|
|
387
|
+
async deposit(channelAddress, amount, fundChannelTokenAccount = true) {
|
|
291
388
|
const signerKeyBase58 = this._requireSignerKey();
|
|
292
389
|
try {
|
|
293
|
-
const { PrivateKey, Field, fetchAccount } = await getO1js();
|
|
390
|
+
const { PrivateKey, PublicKey, Field, UInt64, AccountUpdate, fetchAccount } = await getO1js();
|
|
294
391
|
const Mina = await this._setNetwork();
|
|
295
392
|
const signerPrivateKey = PrivateKey.fromBase58(signerKeyBase58);
|
|
296
393
|
const signerPublicKey = signerPrivateKey.toPublicKey();
|
|
297
394
|
await fetchAccount({ publicKey: signerPublicKey });
|
|
298
395
|
const zkApp = await this._getZkApp(channelAddress);
|
|
299
396
|
const amountField = Field(amount);
|
|
397
|
+
let token = null;
|
|
398
|
+
if (this.isUsdcToken) {
|
|
399
|
+
await this._assertTokenDecimals();
|
|
400
|
+
({ token } = await this._getTokenContext());
|
|
401
|
+
}
|
|
402
|
+
const channelPublicKey = PublicKey.fromBase58(channelAddress);
|
|
300
403
|
const txn = await Mina.transaction(this._feePayer(signerPublicKey), async () => {
|
|
404
|
+
if (token) {
|
|
405
|
+
if (fundChannelTokenAccount) {
|
|
406
|
+
AccountUpdate.fundNewAccount(signerPublicKey, 1);
|
|
407
|
+
}
|
|
408
|
+
await token.transfer(signerPublicKey, channelPublicKey, UInt64.Unsafe.fromField(amountField));
|
|
409
|
+
}
|
|
301
410
|
await zkApp.deposit(amountField, signerPublicKey);
|
|
302
411
|
});
|
|
303
412
|
await txn.prove();
|
|
304
413
|
const sentTx = await txn.sign([signerPrivateKey]).send();
|
|
305
414
|
const txHash = sentTx.hash ?? '';
|
|
306
|
-
this._logger.info({
|
|
415
|
+
this._logger.info({
|
|
416
|
+
event: 'deposit',
|
|
417
|
+
channelAddress,
|
|
418
|
+
amount: amount.toString(),
|
|
419
|
+
usdc: this.isUsdcToken,
|
|
420
|
+
txHash,
|
|
421
|
+
}, 'Deposited into Mina payment channel');
|
|
307
422
|
return { txHash };
|
|
308
423
|
}
|
|
309
424
|
catch (err) {
|
|
@@ -408,10 +523,10 @@ class MinaPaymentChannelSDK {
|
|
|
408
523
|
throw this._wrapError(err, exports.MINA_ERROR_CODES.TRANSACTION_FAILED, 'TRANSACTION_FAILED');
|
|
409
524
|
}
|
|
410
525
|
}
|
|
411
|
-
async settleChannel(channelAddress, balanceA, balanceB, salt, participantA, participantB, nonce) {
|
|
526
|
+
async settleChannel(channelAddress, balanceA, balanceB, salt, participantA, participantB, nonce, options) {
|
|
412
527
|
const signerKeyBase58 = this._requireSignerKey();
|
|
413
528
|
try {
|
|
414
|
-
const { PrivateKey, PublicKey, Field, fetchAccount } = await getO1js();
|
|
529
|
+
const { PrivateKey, PublicKey, Field, UInt64, AccountUpdate, fetchAccount } = await getO1js();
|
|
415
530
|
const Mina = await this._setNetwork();
|
|
416
531
|
const signerPrivateKey = PrivateKey.fromBase58(signerKeyBase58);
|
|
417
532
|
const signerPublicKey = signerPrivateKey.toPublicKey();
|
|
@@ -422,14 +537,44 @@ class MinaPaymentChannelSDK {
|
|
|
422
537
|
const saltField = Field(salt);
|
|
423
538
|
const pubA = PublicKey.fromBase58(participantA);
|
|
424
539
|
const pubB = PublicKey.fromBase58(participantB);
|
|
540
|
+
const channelPublicKey = PublicKey.fromBase58(channelAddress);
|
|
425
541
|
const nonceField = Field(nonce);
|
|
542
|
+
let token = null;
|
|
543
|
+
let channelPrivateKey = null;
|
|
544
|
+
if (this.isUsdcToken) {
|
|
545
|
+
await this._assertTokenDecimals();
|
|
546
|
+
({ token } = await this._getTokenContext());
|
|
547
|
+
const channelKeyBase58 = options?.channelPrivateKey ?? this._channelKeyCache.get(channelAddress);
|
|
548
|
+
if (!channelKeyBase58) {
|
|
549
|
+
throw new MinaChannelError(`Cannot settle USDC channel ${channelAddress}: the channel/zkApp private key is ` +
|
|
550
|
+
'required to authorize the channel-account USDC payouts but is not available. The ' +
|
|
551
|
+
'channel must have been opened by this SDK instance, or channelPrivateKey must be ' +
|
|
552
|
+
'supplied (#192).', exports.MINA_ERROR_CODES.INVALID_PARAMETERS, 'INVALID_PARAMETERS');
|
|
553
|
+
}
|
|
554
|
+
channelPrivateKey = PrivateKey.fromBase58(channelKeyBase58);
|
|
555
|
+
}
|
|
556
|
+
const fundCount = options?.fundParticipantTokenAccounts ?? 0;
|
|
426
557
|
const txn = await Mina.transaction(this._feePayer(signerPublicKey), async () => {
|
|
558
|
+
if (token) {
|
|
559
|
+
if (fundCount > 0) {
|
|
560
|
+
AccountUpdate.fundNewAccount(signerPublicKey, fundCount);
|
|
561
|
+
}
|
|
562
|
+
if (balanceB > 0n) {
|
|
563
|
+
await token.transfer(channelPublicKey, pubB, UInt64.Unsafe.fromField(balB));
|
|
564
|
+
}
|
|
565
|
+
if (balanceA > 0n) {
|
|
566
|
+
await token.transfer(channelPublicKey, pubA, UInt64.Unsafe.fromField(balA));
|
|
567
|
+
}
|
|
568
|
+
}
|
|
427
569
|
await zkApp.settle(balA, balB, saltField, pubA, pubB, nonceField);
|
|
428
570
|
});
|
|
429
571
|
await txn.prove();
|
|
430
|
-
const
|
|
572
|
+
const signers = channelPrivateKey
|
|
573
|
+
? [signerPrivateKey, channelPrivateKey]
|
|
574
|
+
: [signerPrivateKey];
|
|
575
|
+
const sentTx = await txn.sign(signers).send();
|
|
431
576
|
const txHash = sentTx.hash ?? '';
|
|
432
|
-
this._logger.info({ event: 'settle_channel', channelAddress, txHash }, 'Mina payment channel settled');
|
|
577
|
+
this._logger.info({ event: 'settle_channel', channelAddress, usdc: this.isUsdcToken, txHash }, 'Mina payment channel settled');
|
|
433
578
|
return { txHash };
|
|
434
579
|
}
|
|
435
580
|
catch (err) {
|