@ledgerhq/device-signer-kit-solana 0.0.0-rn-ble-pairing-removed-while-reconnecting-20250807094338 → 0.0.0-transactionInspector-resolutionObj-20250916071327
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/lib/cjs/api/SignerSolana.js +1 -1
- package/lib/cjs/api/SignerSolana.js.map +1 -1
- package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +1 -1
- package/lib/cjs/api/model/TransactionResolutionContext.js +2 -0
- package/lib/cjs/api/model/TransactionResolutionContext.js.map +7 -0
- package/lib/cjs/internal/DefaultSignerSolana.js +1 -1
- package/lib/cjs/internal/DefaultSignerSolana.js.map +3 -3
- package/lib/cjs/internal/app-binder/SolanaAppBinder.js +1 -1
- package/lib/cjs/internal/app-binder/SolanaAppBinder.js.map +2 -2
- package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.js.map +2 -2
- package/lib/cjs/internal/app-binder/services/TransactionInspector.js +1 -3
- package/lib/cjs/internal/app-binder/services/TransactionInspector.js.map +3 -3
- package/lib/cjs/internal/app-binder/services/utils/transactionDecoders.js +2 -0
- package/lib/cjs/internal/app-binder/services/utils/transactionDecoders.js.map +7 -0
- package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.js +1 -1
- package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.js.map +3 -3
- package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.test.js +1 -1
- package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.test.js.map +2 -2
- package/lib/cjs/package.json +1 -1
- package/lib/esm/api/model/TransactionResolutionContext.js +1 -0
- package/lib/esm/api/model/TransactionResolutionContext.js.map +7 -0
- package/lib/esm/internal/DefaultSignerSolana.js +1 -1
- package/lib/esm/internal/DefaultSignerSolana.js.map +3 -3
- package/lib/esm/internal/app-binder/SolanaAppBinder.js +1 -1
- package/lib/esm/internal/app-binder/SolanaAppBinder.js.map +2 -2
- package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.js +1 -1
- package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.js.map +2 -2
- package/lib/esm/internal/app-binder/services/TransactionInspector.js +1 -3
- package/lib/esm/internal/app-binder/services/TransactionInspector.js.map +3 -3
- package/lib/esm/internal/app-binder/services/utils/transactionDecoders.js +2 -0
- package/lib/esm/internal/app-binder/services/utils/transactionDecoders.js.map +7 -0
- package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.js +1 -1
- package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.js.map +3 -3
- package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.test.js +1 -1
- package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.test.js.map +2 -2
- package/lib/esm/package.json +1 -1
- package/lib/types/api/SignerSolana.d.ts +2 -1
- package/lib/types/api/SignerSolana.d.ts.map +1 -1
- package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +3 -1
- package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -1
- package/lib/types/api/model/TransactionResolutionContext.d.ts +8 -0
- package/lib/types/api/model/TransactionResolutionContext.d.ts.map +1 -0
- package/lib/types/internal/DefaultSignerSolana.d.ts +2 -1
- package/lib/types/internal/DefaultSignerSolana.d.ts.map +1 -1
- package/lib/types/internal/app-binder/SolanaAppBinder.d.ts +2 -0
- package/lib/types/internal/app-binder/SolanaAppBinder.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/SignTransactionDeviceAction.d.ts +1 -1
- package/lib/types/internal/app-binder/device-action/SignTransactionDeviceAction.d.ts.map +1 -1
- package/lib/types/internal/app-binder/services/TransactionInspector.d.ts +24 -13
- package/lib/types/internal/app-binder/services/TransactionInspector.d.ts.map +1 -1
- package/lib/types/internal/app-binder/services/utils/transactionDecoders.d.ts +25 -0
- package/lib/types/internal/app-binder/services/utils/transactionDecoders.d.ts.map +1 -0
- package/lib/types/internal/use-cases/transaction/SignTransactionUseCase.d.ts +2 -1
- package/lib/types/internal/use-cases/transaction/SignTransactionUseCase.d.ts.map +1 -1
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +7 -7
- package/lib/cjs/internal/app-binder/services/TransactionInspector.test.js +0 -2
- package/lib/cjs/internal/app-binder/services/TransactionInspector.test.js.map +0 -7
- package/lib/esm/internal/app-binder/services/TransactionInspector.test.js +0 -2
- package/lib/esm/internal/app-binder/services/TransactionInspector.test.js.map +0 -7
- package/lib/types/internal/app-binder/services/TransactionInspector.test.d.ts +0 -2
- package/lib/types/internal/app-binder/services/TransactionInspector.test.d.ts.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useCasesTypes as
|
|
1
|
+
import{useCasesTypes as r}from"./use-cases/di/useCasesTypes";import{makeContainer as s}from"./di";class p{_container;constructor({dmk:e,sessionId:t,contextModule:n}){this._container=s({dmk:e,sessionId:t,contextModule:n})}signTransaction(e,t,n){return this._container.get(r.SignTransactionUseCase).execute(e,t,n)}signMessage(e,t,n){return this._container.get(r.SignMessageUseCase).execute(e,t,n)}getAddress(e,t){return this._container.get(r.GetAddressUseCase).execute(e,t)}getAppConfiguration(){return this._container.get(r.GetAppConfigurationUseCase).execute()}}export{p as DefaultSignerSolana};
|
|
2
2
|
//# sourceMappingURL=DefaultSignerSolana.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/internal/DefaultSignerSolana.ts"],
|
|
4
|
-
"sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n type DeviceManagementKit,\n type DeviceSessionId,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Container } from \"inversify\";\n\nimport { type GetAddressDAReturnType } from \"@api/app-binder/GetAddressDeviceActionTypes\";\nimport { type GetAppConfigurationDAReturnType } from \"@api/app-binder/GetAppConfigurationDeviceActionTypes\";\nimport { type SignMessageDAReturnType } from \"@api/app-binder/SignMessageDeviceActionTypes\";\nimport { type SignTransactionDAReturnType } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type AddressOptions } from \"@api/model/AddressOption\";\nimport { type MessageOptions } from \"@api/model/MessageOptions\";\nimport { type Transaction } from \"@api/model/Transaction\";\nimport { type SignerSolana } from \"@api/SignerSolana\";\n\nimport { type GetAddressUseCase } from \"./use-cases/address/GetAddressUseCase\";\nimport { type GetAppConfigurationUseCase } from \"./use-cases/app-configuration/GetAppConfigurationUseCase\";\nimport { useCasesTypes } from \"./use-cases/di/useCasesTypes\";\nimport { type SignMessageUseCase } from \"./use-cases/message/SignMessageUseCase\";\nimport { type SignTransactionUseCase } from \"./use-cases/transaction/SignTransactionUseCase\";\nimport { makeContainer } from \"./di\";\n\nexport type DefaultSignerSolanaConstructorArgs = {\n dmk: DeviceManagementKit;\n sessionId: DeviceSessionId;\n contextModule: ContextModule;\n};\n\nexport class DefaultSignerSolana implements SignerSolana {\n private _container: Container;\n\n constructor({\n dmk,\n sessionId,\n contextModule,\n }: DefaultSignerSolanaConstructorArgs) {\n this._container = makeContainer({ dmk, sessionId, contextModule });\n }\n\n signTransaction(\n derivationPath: string,\n transaction: Transaction,\n ): SignTransactionDAReturnType {\n return this._container\n .get<SignTransactionUseCase>(useCasesTypes.SignTransactionUseCase)\n .execute(derivationPath, transaction);\n }\n\n signMessage(\n derivationPath: string,\n message: string,\n options?: MessageOptions,\n ): SignMessageDAReturnType {\n return this._container\n .get<SignMessageUseCase>(useCasesTypes.SignMessageUseCase)\n .execute(derivationPath, message, options);\n }\n\n getAddress(\n derivationPath: string,\n options?: AddressOptions,\n ): GetAddressDAReturnType {\n return this._container\n .get<GetAddressUseCase>(useCasesTypes.GetAddressUseCase)\n .execute(derivationPath, options);\n }\n\n getAppConfiguration(): GetAppConfigurationDAReturnType {\n return this._container\n .get<GetAppConfigurationUseCase>(useCasesTypes.GetAppConfigurationUseCase)\n .execute();\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["useCasesTypes", "makeContainer", "DefaultSignerSolana", "dmk", "sessionId", "contextModule", "derivationPath", "transaction", "message", "options"]
|
|
4
|
+
"sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n type DeviceManagementKit,\n type DeviceSessionId,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Container } from \"inversify\";\n\nimport { type GetAddressDAReturnType } from \"@api/app-binder/GetAddressDeviceActionTypes\";\nimport { type GetAppConfigurationDAReturnType } from \"@api/app-binder/GetAppConfigurationDeviceActionTypes\";\nimport { type SignMessageDAReturnType } from \"@api/app-binder/SignMessageDeviceActionTypes\";\nimport { type SignTransactionDAReturnType } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type AddressOptions } from \"@api/model/AddressOption\";\nimport { type MessageOptions } from \"@api/model/MessageOptions\";\nimport { type Transaction } from \"@api/model/Transaction\";\nimport { type TransactionResolutionContext } from \"@api/model/TransactionResolutionContext\";\nimport { type SignerSolana } from \"@api/SignerSolana\";\n\nimport { type GetAddressUseCase } from \"./use-cases/address/GetAddressUseCase\";\nimport { type GetAppConfigurationUseCase } from \"./use-cases/app-configuration/GetAppConfigurationUseCase\";\nimport { useCasesTypes } from \"./use-cases/di/useCasesTypes\";\nimport { type SignMessageUseCase } from \"./use-cases/message/SignMessageUseCase\";\nimport { type SignTransactionUseCase } from \"./use-cases/transaction/SignTransactionUseCase\";\nimport { makeContainer } from \"./di\";\n\nexport type DefaultSignerSolanaConstructorArgs = {\n dmk: DeviceManagementKit;\n sessionId: DeviceSessionId;\n contextModule: ContextModule;\n};\n\nexport class DefaultSignerSolana implements SignerSolana {\n private _container: Container;\n\n constructor({\n dmk,\n sessionId,\n contextModule,\n }: DefaultSignerSolanaConstructorArgs) {\n this._container = makeContainer({ dmk, sessionId, contextModule });\n }\n\n signTransaction(\n derivationPath: string,\n transaction: Transaction,\n resolutionContext?: TransactionResolutionContext,\n ): SignTransactionDAReturnType {\n return this._container\n .get<SignTransactionUseCase>(useCasesTypes.SignTransactionUseCase)\n .execute(derivationPath, transaction, resolutionContext);\n }\n\n signMessage(\n derivationPath: string,\n message: string,\n options?: MessageOptions,\n ): SignMessageDAReturnType {\n return this._container\n .get<SignMessageUseCase>(useCasesTypes.SignMessageUseCase)\n .execute(derivationPath, message, options);\n }\n\n getAddress(\n derivationPath: string,\n options?: AddressOptions,\n ): GetAddressDAReturnType {\n return this._container\n .get<GetAddressUseCase>(useCasesTypes.GetAddressUseCase)\n .execute(derivationPath, options);\n }\n\n getAppConfiguration(): GetAppConfigurationDAReturnType {\n return this._container\n .get<GetAppConfigurationUseCase>(useCasesTypes.GetAppConfigurationUseCase)\n .execute();\n }\n}\n"],
|
|
5
|
+
"mappings": "AAmBA,OAAS,iBAAAA,MAAqB,+BAG9B,OAAS,iBAAAC,MAAqB,OAQvB,MAAMC,CAA4C,CAC/C,WAER,YAAY,CACV,IAAAC,EACA,UAAAC,EACA,cAAAC,CACF,EAAuC,CACrC,KAAK,WAAaJ,EAAc,CAAE,IAAAE,EAAK,UAAAC,EAAW,cAAAC,CAAc,CAAC,CACnE,CAEA,gBACEC,EACAC,EACAC,EAC6B,CAC7B,OAAO,KAAK,WACT,IAA4BR,EAAc,sBAAsB,EAChE,QAAQM,EAAgBC,EAAaC,CAAiB,CAC3D,CAEA,YACEF,EACAG,EACAC,EACyB,CACzB,OAAO,KAAK,WACT,IAAwBV,EAAc,kBAAkB,EACxD,QAAQM,EAAgBG,EAASC,CAAO,CAC7C,CAEA,WACEJ,EACAI,EACwB,CACxB,OAAO,KAAK,WACT,IAAuBV,EAAc,iBAAiB,EACtD,QAAQM,EAAgBI,CAAO,CACpC,CAEA,qBAAuD,CACrD,OAAO,KAAK,WACT,IAAgCV,EAAc,0BAA0B,EACxE,QAAQ,CACb,CACF",
|
|
6
|
+
"names": ["useCasesTypes", "makeContainer", "DefaultSignerSolana", "dmk", "sessionId", "contextModule", "derivationPath", "transaction", "resolutionContext", "message", "options"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var v=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var u=(o,e,n,t)=>{for(var i=t>1?void 0:t?D(e,n):e,a=o.length-1,c;a>=0;a--)(c=o[a])&&(i=(t?c(e,n,i):c(i))||i);return t&&i&&v(e,n,i),i},s=(o,e)=>(n,t)=>e(n,t,o);import{CallTaskInAppDeviceAction as
|
|
1
|
+
var v=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var u=(o,e,n,t)=>{for(var i=t>1?void 0:t?D(e,n):e,a=o.length-1,c;a>=0;a--)(c=o[a])&&(i=(t?c(e,n,i):c(i))||i);return t&&i&&v(e,n,i),i},s=(o,e)=>(n,t)=>e(n,t,o);import{CallTaskInAppDeviceAction as T,SendCommandInAppDeviceAction as A,UserInteractionRequired as r}from"@ledgerhq/device-management-kit";import{inject as d,injectable as k}from"inversify";import{SendSignMessageTask as l}from"../app-binder/task/SendSignMessageTask";import{externalTypes as m}from"../externalTypes";import{GetAppConfigurationCommand as h}from"./command/GetAppConfigurationCommand";import{GetPubKeyCommand as g}from"./command/GetPubKeyCommand";import{GenerateTransactionDeviceAction as f}from"./device-action/GenerateTransactionDeviceAction";import{SignTransactionDeviceAction as x}from"./device-action/SignTransactionDeviceAction";let p=class{constructor(e,n,t){this.dmk=e;this.sessionId=n;this.contextModule=t}getAddress(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new A({input:{command:new g(e),appName:"Solana",requiredUserInteraction:e.checkOnDevice?r.VerifyAddress:r.None,skipOpenApp:e.skipOpenApp}})})}signTransaction(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new x({input:{derivationPath:e.derivationPath,transaction:e.transaction,resolutionContext:e.resolutionContext,skipOpenApp:e.skipOpenApp,contextModule:this.contextModule}})})}generateTransaction(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new f({input:{derivationPath:e.derivationPath,skipOpenApp:e.skipOpenApp,contextModule:this.contextModule}})})}signMessage(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new T({input:{task:async n=>new l(n,{derivationPath:e.derivationPath,sendingData:new TextEncoder().encode(e.message)}).run(),appName:"Solana",requiredUserInteraction:r.SignPersonalMessage,skipOpenApp:e.skipOpenApp}})})}getAppConfiguration(){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new A({input:{command:new h,appName:"Solana",requiredUserInteraction:r.None,skipOpenApp:!1}})})}};p=u([k(),s(0,d(m.Dmk)),s(1,d(m.SessionId)),s(2,d(m.ContextModule))],p);export{p as SolanaAppBinder};
|
|
2
2
|
//# sourceMappingURL=SolanaAppBinder.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/internal/app-binder/SolanaAppBinder.ts"],
|
|
4
|
-
"sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n CallTaskInAppDeviceAction,\n DeviceManagementKit,\n type DeviceSessionId,\n SendCommandInAppDeviceAction,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { GenerateTransactionDAReturnType } from \"@api/app-binder/GenerateTransactionDeviceActionTypes\";\nimport { GetAddressDAReturnType } from \"@api/app-binder/GetAddressDeviceActionTypes\";\nimport { GetAppConfigurationDAReturnType } from \"@api/app-binder/GetAppConfigurationDeviceActionTypes\";\nimport { SignMessageDAReturnType } from \"@api/app-binder/SignMessageDeviceActionTypes\";\nimport { SignTransactionDAReturnType } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { Transaction } from \"@api/model/Transaction\";\nimport { SendSignMessageTask } from \"@internal/app-binder/task/SendSignMessageTask\";\nimport { externalTypes } from \"@internal/externalTypes\";\n\nimport { GetAppConfigurationCommand } from \"./command/GetAppConfigurationCommand\";\nimport { GetPubKeyCommand } from \"./command/GetPubKeyCommand\";\nimport { GenerateTransactionDeviceAction } from \"./device-action/GenerateTransactionDeviceAction\";\nimport { SignTransactionDeviceAction } from \"./device-action/SignTransactionDeviceAction\";\n\n@injectable()\nexport class SolanaAppBinder {\n constructor(\n @inject(externalTypes.Dmk) private dmk: DeviceManagementKit,\n @inject(externalTypes.SessionId) private sessionId: DeviceSessionId,\n @inject(externalTypes.ContextModule) private contextModule: ContextModule,\n ) {}\n\n getAddress(args: {\n derivationPath: string;\n checkOnDevice: boolean;\n skipOpenApp: boolean;\n }): GetAddressDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetPubKeyCommand(args),\n appName: \"Solana\",\n requiredUserInteraction: args.checkOnDevice\n ? UserInteractionRequired.VerifyAddress\n : UserInteractionRequired.None,\n skipOpenApp: args.skipOpenApp,\n },\n }),\n });\n }\n\n signTransaction(args: {\n derivationPath: string;\n transaction: Transaction;\n skipOpenApp: boolean;\n }): SignTransactionDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new SignTransactionDeviceAction({\n input: {\n derivationPath: args.derivationPath,\n transaction: args.transaction,\n skipOpenApp: args.skipOpenApp,\n contextModule: this.contextModule,\n },\n }),\n });\n }\n\n generateTransaction(args: {\n derivationPath: string;\n skipOpenApp: boolean;\n }): GenerateTransactionDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new GenerateTransactionDeviceAction({\n input: {\n derivationPath: args.derivationPath,\n skipOpenApp: args.skipOpenApp,\n contextModule: this.contextModule,\n },\n }),\n });\n }\n\n signMessage(args: {\n derivationPath: string;\n message: string;\n skipOpenApp: boolean;\n }): SignMessageDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new CallTaskInAppDeviceAction({\n input: {\n task: async (internalApi) =>\n new SendSignMessageTask(internalApi, {\n derivationPath: args.derivationPath,\n sendingData: new TextEncoder().encode(args.message),\n }).run(),\n appName: \"Solana\",\n requiredUserInteraction: UserInteractionRequired.SignPersonalMessage,\n skipOpenApp: args.skipOpenApp,\n },\n }),\n });\n }\n\n getAppConfiguration(): GetAppConfigurationDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetAppConfigurationCommand(),\n appName: \"Solana\",\n requiredUserInteraction: UserInteractionRequired.None,\n skipOpenApp: false,\n },\n }),\n });\n }\n}\n"],
|
|
5
|
-
"mappings": "iOACA,OACE,6BAAAA,EAGA,gCAAAC,EACA,2BAAAC,MACK,kCACP,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,
|
|
4
|
+
"sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n CallTaskInAppDeviceAction,\n DeviceManagementKit,\n type DeviceSessionId,\n SendCommandInAppDeviceAction,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { GenerateTransactionDAReturnType } from \"@api/app-binder/GenerateTransactionDeviceActionTypes\";\nimport { GetAddressDAReturnType } from \"@api/app-binder/GetAddressDeviceActionTypes\";\nimport { GetAppConfigurationDAReturnType } from \"@api/app-binder/GetAppConfigurationDeviceActionTypes\";\nimport { SignMessageDAReturnType } from \"@api/app-binder/SignMessageDeviceActionTypes\";\nimport { SignTransactionDAReturnType } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { Transaction } from \"@api/model/Transaction\";\nimport { TransactionResolutionContext } from \"@api/model/TransactionResolutionContext\";\nimport { SendSignMessageTask } from \"@internal/app-binder/task/SendSignMessageTask\";\nimport { externalTypes } from \"@internal/externalTypes\";\n\nimport { GetAppConfigurationCommand } from \"./command/GetAppConfigurationCommand\";\nimport { GetPubKeyCommand } from \"./command/GetPubKeyCommand\";\nimport { GenerateTransactionDeviceAction } from \"./device-action/GenerateTransactionDeviceAction\";\nimport { SignTransactionDeviceAction } from \"./device-action/SignTransactionDeviceAction\";\n\n@injectable()\nexport class SolanaAppBinder {\n constructor(\n @inject(externalTypes.Dmk) private dmk: DeviceManagementKit,\n @inject(externalTypes.SessionId) private sessionId: DeviceSessionId,\n @inject(externalTypes.ContextModule) private contextModule: ContextModule,\n ) {}\n\n getAddress(args: {\n derivationPath: string;\n checkOnDevice: boolean;\n skipOpenApp: boolean;\n }): GetAddressDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetPubKeyCommand(args),\n appName: \"Solana\",\n requiredUserInteraction: args.checkOnDevice\n ? UserInteractionRequired.VerifyAddress\n : UserInteractionRequired.None,\n skipOpenApp: args.skipOpenApp,\n },\n }),\n });\n }\n\n signTransaction(args: {\n derivationPath: string;\n transaction: Transaction;\n resolutionContext?: TransactionResolutionContext;\n skipOpenApp: boolean;\n }): SignTransactionDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new SignTransactionDeviceAction({\n input: {\n derivationPath: args.derivationPath,\n transaction: args.transaction,\n resolutionContext: args.resolutionContext,\n skipOpenApp: args.skipOpenApp,\n contextModule: this.contextModule,\n },\n }),\n });\n }\n\n generateTransaction(args: {\n derivationPath: string;\n skipOpenApp: boolean;\n }): GenerateTransactionDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new GenerateTransactionDeviceAction({\n input: {\n derivationPath: args.derivationPath,\n skipOpenApp: args.skipOpenApp,\n contextModule: this.contextModule,\n },\n }),\n });\n }\n\n signMessage(args: {\n derivationPath: string;\n message: string;\n skipOpenApp: boolean;\n }): SignMessageDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new CallTaskInAppDeviceAction({\n input: {\n task: async (internalApi) =>\n new SendSignMessageTask(internalApi, {\n derivationPath: args.derivationPath,\n sendingData: new TextEncoder().encode(args.message),\n }).run(),\n appName: \"Solana\",\n requiredUserInteraction: UserInteractionRequired.SignPersonalMessage,\n skipOpenApp: args.skipOpenApp,\n },\n }),\n });\n }\n\n getAppConfiguration(): GetAppConfigurationDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetAppConfigurationCommand(),\n appName: \"Solana\",\n requiredUserInteraction: UserInteractionRequired.None,\n skipOpenApp: false,\n },\n }),\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "iOACA,OACE,6BAAAA,EAGA,gCAAAC,EACA,2BAAAC,MACK,kCACP,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YASnC,OAAS,uBAAAC,MAA2B,gDACpC,OAAS,iBAAAC,MAAqB,0BAE9B,OAAS,8BAAAC,MAAkC,uCAC3C,OAAS,oBAAAC,MAAwB,6BACjC,OAAS,mCAAAC,MAAuC,kDAChD,OAAS,+BAAAC,MAAmC,8CAGrC,IAAMC,EAAN,KAAsB,CAC3B,YACqCC,EACMC,EACIC,EAC7C,CAHmC,SAAAF,EACM,eAAAC,EACI,mBAAAC,CAC5C,CAEH,WAAWC,EAIgB,CACzB,OAAO,KAAK,IAAI,oBAAoB,CAClC,UAAW,KAAK,UAChB,aAAc,IAAIC,EAA6B,CAC7C,MAAO,CACL,QAAS,IAAIC,EAAiBF,CAAI,EAClC,QAAS,SACT,wBAAyBA,EAAK,cAC1BG,EAAwB,cACxBA,EAAwB,KAC5B,YAAaH,EAAK,WACpB,CACF,CAAC,CACH,CAAC,CACH,CAEA,gBAAgBA,EAKgB,CAC9B,OAAO,KAAK,IAAI,oBAAoB,CAClC,UAAW,KAAK,UAChB,aAAc,IAAII,EAA4B,CAC5C,MAAO,CACL,eAAgBJ,EAAK,eACrB,YAAaA,EAAK,YAClB,kBAAmBA,EAAK,kBACxB,YAAaA,EAAK,YAClB,cAAe,KAAK,aACtB,CACF,CAAC,CACH,CAAC,CACH,CAEA,oBAAoBA,EAGgB,CAClC,OAAO,KAAK,IAAI,oBAAoB,CAClC,UAAW,KAAK,UAChB,aAAc,IAAIK,EAAgC,CAChD,MAAO,CACL,eAAgBL,EAAK,eACrB,YAAaA,EAAK,YAClB,cAAe,KAAK,aACtB,CACF,CAAC,CACH,CAAC,CACH,CAEA,YAAYA,EAIgB,CAC1B,OAAO,KAAK,IAAI,oBAAoB,CAClC,UAAW,KAAK,UAChB,aAAc,IAAIM,EAA0B,CAC1C,MAAO,CACL,KAAM,MAAOC,GACX,IAAIC,EAAoBD,EAAa,CACnC,eAAgBP,EAAK,eACrB,YAAa,IAAI,YAAY,EAAE,OAAOA,EAAK,OAAO,CACpD,CAAC,EAAE,IAAI,EACT,QAAS,SACT,wBAAyBG,EAAwB,oBACjD,YAAaH,EAAK,WACpB,CACF,CAAC,CACH,CAAC,CACH,CAEA,qBAAuD,CACrD,OAAO,KAAK,IAAI,oBAAoB,CAClC,UAAW,KAAK,UAChB,aAAc,IAAIC,EAA6B,CAC7C,MAAO,CACL,QAAS,IAAIQ,EACb,QAAS,SACT,wBAAyBN,EAAwB,KACjD,YAAa,EACf,CACF,CAAC,CACH,CAAC,CACH,CACF,EAlGaP,EAANc,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAc,GAAG,GACxBF,EAAA,EAAAC,EAAOC,EAAc,SAAS,GAC9BF,EAAA,EAAAC,EAAOC,EAAc,aAAa,IAJ1BlB",
|
|
6
6
|
"names": ["CallTaskInAppDeviceAction", "SendCommandInAppDeviceAction", "UserInteractionRequired", "inject", "injectable", "SendSignMessageTask", "externalTypes", "GetAppConfigurationCommand", "GetPubKeyCommand", "GenerateTransactionDeviceAction", "SignTransactionDeviceAction", "SolanaAppBinder", "dmk", "sessionId", "contextModule", "args", "SendCommandInAppDeviceAction", "GetPubKeyCommand", "UserInteractionRequired", "SignTransactionDeviceAction", "GenerateTransactionDeviceAction", "CallTaskInAppDeviceAction", "internalApi", "SendSignMessageTask", "GetAppConfigurationCommand", "__decorateClass", "injectable", "__decorateParam", "inject", "externalTypes"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{DeviceModelId as S,isSuccessCommandResult as g,OpenAppDeviceAction as T,UnknownDAError as s,UserInteractionRequired as a,XStateDeviceAction as
|
|
1
|
+
import{DeviceModelId as S,isSuccessCommandResult as g,OpenAppDeviceAction as T,UnknownDAError as s,UserInteractionRequired as a,XStateDeviceAction as m}from"@ledgerhq/device-management-kit";import{Left as A,Right as C}from"purify-ts";import{assign as e,fromPromise as i,setup as y}from"xstate";import{GetAppConfigurationCommand as D}from"../../app-binder/command/GetAppConfigurationCommand";import{SignTransactionCommand as x}from"../../app-binder/command/SignTransactionCommand";import{ApplicationChecker as f}from"../../app-binder/services/ApplicationChecker";import{SolanaTransactionTypes as E,TransactionInspector as v}from"../../app-binder/services/TransactionInspector";import{BuildTransactionContextTask as I}from"../../app-binder/task/BuildTransactionContextTask";import{ProvideSolanaTransactionContextTask as h}from"../../app-binder/task/ProvideTransactionContextTask";import{SignDataTask as k}from"../../app-binder/task/SendSignDataTask";class F extends m{makeStateMachine(r){const{signTransaction:p,getAppConfig:c,buildContext:u,provideContext:l,inspectTransaction:d}=this.extractDependencies(r);return y({types:{input:{},context:{},output:{}},actors:{openAppStateMachine:new T({input:{appName:"Solana"}}).makeStateMachine(r),getAppConfig:i(c),inspectTransaction:i(({input:t})=>d({serializedTransaction:t.transaction})),buildContext:i(u),provideContext:i(l),signTransaction:i(p)},guards:{noInternalError:({context:t})=>t._internalState.error===null,skipOpenApp:({context:t})=>t.input.skipOpenApp,isSPLSupported:({context:t})=>new f(r.getDeviceSessionState(),t._internalState.appConfig).withMinVersionExclusive("1.4.0").excludeDeviceModel(S.NANO_S).check(),isAnSPLTransaction:({context:t})=>t._internalState.inspectorResult?.transactionType===E.SPL,shouldSkipInspection:({context:t})=>t._internalState.error===null&&!!t.input.resolutionContext},actions:{assignErrorFromEvent:e({_internalState:t=>({...t.context._internalState,error:new s(t.event.error instanceof Error?t.event.error.message:String(t.event.error))})})}}).createMachine({id:"SignTransactionDeviceAction",initial:"InitialState",context:({input:t})=>({input:t,intermediateValue:{requiredUserInteraction:a.None},_internalState:{error:null,signature:null,appConfig:null,solanaTransactionContext:null,inspectorResult:null}}),states:{InitialState:{always:[{target:"GetAppConfig",guard:"skipOpenApp"},{target:"OpenAppDeviceAction"}]},OpenAppDeviceAction:{exit:e({intermediateValue:()=>({requiredUserInteraction:a.None})}),invoke:{id:"openAppStateMachine",src:"openAppStateMachine",input:()=>({appName:"Solana"}),onSnapshot:{actions:e({intermediateValue:({event:t})=>t.snapshot.context.intermediateValue})},onDone:{target:"CheckOpenAppDeviceActionResult",actions:e({_internalState:({event:t,context:n})=>t.output.caseOf({Right:()=>n._internalState,Left:o=>({...n._internalState,error:o})})})}}},CheckOpenAppDeviceActionResult:{always:[{target:"GetAppConfig",guard:"noInternalError"},{target:"Error"}]},GetAppConfig:{entry:e({intermediateValue:()=>({requiredUserInteraction:a.None})}),invoke:{id:"getAppConfig",src:"getAppConfig",onDone:{target:"GetAppConfigResultCheck",actions:e({_internalState:({event:t,context:n})=>g(t.output)?{...n._internalState,appConfig:t.output.data}:{...n._internalState,error:t.output.error}})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},GetAppConfigResultCheck:{always:[{target:"InspectTransaction",guard:"noInternalError"},{target:"Error"}]},InspectTransaction:{invoke:{id:"inspectTransaction",src:"inspectTransaction",input:({context:t})=>({...t.input,serializedTransaction:t.input.transaction}),onDone:{target:"AfterInspect",actions:e({_internalState:({context:t,event:n})=>({...t._internalState,inspectorResult:n.output})})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},AfterInspect:{always:[{target:"BuildContext",guard:"isAnSPLTransaction"},{target:"SignTransaction",guard:"noInternalError"},{target:"Error"}]},BuildContext:{entry:e({intermediateValue:()=>({requiredUserInteraction:a.None})}),invoke:{id:"buildContext",src:"buildContext",input:({context:t})=>{const n=t._internalState.inspectorResult?.data;return{contextModule:t.input.contextModule,options:{tokenAddress:n?.tokenAddress,createATA:n?.createATA}}},onDone:{target:"ProvideContext",actions:[e({_internalState:({event:t,context:n})=>({...n._internalState,solanaTransactionContext:{descriptor:t.output.descriptor,certificate:t.output.calCertificate,tokenAccount:t.output.addressResult.tokenAccount,owner:t.output.addressResult.owner,contract:t.output.addressResult.contract}})})]},onError:{target:"Error",actions:"assignErrorFromEvent"}}},ProvideContext:{entry:e({intermediateValue:()=>({requiredUserInteraction:a.None})}),invoke:{id:"provideContext",src:"provideContext",input:({context:t})=>{if(!t._internalState.solanaTransactionContext)throw new s("Solana transaction context is not available");return t._internalState.solanaTransactionContext},onDone:{target:"ProvideContextResultCheck"},onError:{target:"Error",actions:"assignErrorFromEvent"}}},ProvideContextResultCheck:{always:[{target:"SignTransaction",guard:"noInternalError"},{target:"Error"}]},SignTransaction:{entry:e({intermediateValue:{requiredUserInteraction:a.SignTransaction}}),exit:e({intermediateValue:{requiredUserInteraction:a.None}}),invoke:{id:"signTransaction",src:"signTransaction",input:({context:t})=>({derivationPath:t.input.derivationPath,serializedTransaction:t.input.transaction}),onDone:{target:"SignTransactionResultCheck",actions:[e({_internalState:({event:t,context:n})=>{if(!g(t.output))return{...n._internalState,error:t.output.error};const o=t.output.data.extract();return t.output.data.isJust()&&o instanceof Uint8Array?{...n._internalState,signature:o}:{...n._internalState,error:new s("No Signature available")}}})]},onError:{target:"Error",actions:"assignErrorFromEvent"}}},SignTransactionResultCheck:{always:[{guard:"noInternalError",target:"Success"},{target:"Error"}]},Success:{type:"final"},Error:{type:"final"}},output:({context:t})=>t._internalState.signature?C(t._internalState.signature):A(t._internalState.error||new s("No error or signature available"))})}extractDependencies(r){return{getAppConfig:async()=>r.sendCommand(new D),buildContext:async t=>new I(r,t.input).run(),provideContext:async t=>new h(r,t.input).run(),signTransaction:async t=>new k(r,{commandFactory:n=>new x({serializedTransaction:n.chunkedData,more:n.more,extend:n.extend}),derivationPath:t.input.derivationPath,sendingData:t.input.serializedTransaction}).run(),inspectTransaction:async t=>Promise.resolve(new v(t.serializedTransaction,t.resolutionContext?.tokenAddress||null,t.resolutionContext?.createATA||null).inspectTransactionType())}}}export{F as SignTransactionDeviceAction};
|
|
2
2
|
//# sourceMappingURL=SignTransactionDeviceAction.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/device-action/SignTransactionDeviceAction.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type CommandErrorResult,\n type CommandResult,\n type DeviceActionStateMachine,\n DeviceModelId,\n type InternalApi,\n isSuccessCommandResult,\n OpenAppDeviceAction,\n type StateMachineTypes,\n UnknownDAError,\n UserInteractionRequired,\n XStateDeviceAction,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, type Maybe, Right } from \"purify-ts\";\nimport { assign, fromPromise, setup } from \"xstate\";\n\nimport {\n type SignTransactionDAError,\n type SignTransactionDAInput,\n type SignTransactionDAIntermediateValue,\n type SignTransactionDAInternalState,\n type SignTransactionDAOutput,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\nimport { type Signature } from \"@api/model/Signature\";\nimport { GetAppConfigurationCommand } from \"@internal/app-binder/command/GetAppConfigurationCommand\";\nimport { SignTransactionCommand } from \"@internal/app-binder/command/SignTransactionCommand\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport { ApplicationChecker } from \"@internal/app-binder/services/ApplicationChecker\";\nimport {\n SolanaTransactionTypes,\n TransactionInspector,\n type TxInspectorResult,\n} from \"@internal/app-binder/services/TransactionInspector\";\nimport {\n BuildTransactionContextTask,\n type BuildTransactionContextTaskArgs,\n type SolanaBuildContextResult,\n} from \"@internal/app-binder/task/BuildTransactionContextTask\";\nimport {\n ProvideSolanaTransactionContextTask,\n type SolanaContextForDevice,\n} from \"@internal/app-binder/task/ProvideTransactionContextTask\";\nimport { SignDataTask } from \"@internal/app-binder/task/SendSignDataTask\";\n\nexport type MachineDependencies = {\n readonly getAppConfig: () => Promise<\n CommandResult<AppConfiguration, SolanaAppErrorCodes>\n >;\n readonly buildContext: (arg0: {\n input: BuildTransactionContextTaskArgs;\n }) => Promise<SolanaBuildContextResult>;\n readonly provideContext: (arg0: {\n input: SolanaContextForDevice;\n }) => Promise<Maybe<CommandErrorResult<SolanaAppErrorCodes>>>;\n readonly inspectTransaction: (arg0: {\n serializedTransaction: Uint8Array;\n }) => Promise<TxInspectorResult>;\n readonly signTransaction: (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n };\n }) => Promise<\n CommandResult<Maybe<Signature | SolanaAppErrorCodes>, SolanaAppErrorCodes>\n >;\n};\n\nexport class SignTransactionDeviceAction extends XStateDeviceAction<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n> {\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n > {\n type types = StateMachineTypes<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n >;\n\n const {\n signTransaction,\n getAppConfig,\n buildContext,\n provideContext,\n inspectTransaction,\n } = this.extractDependencies(internalApi);\n\n return setup({\n types: {\n input: {} as types[\"input\"],\n context: {} as types[\"context\"],\n output: {} as types[\"output\"],\n },\n actors: {\n openAppStateMachine: new OpenAppDeviceAction({\n input: { appName: \"Solana\" },\n }).makeStateMachine(internalApi),\n getAppConfig: fromPromise(getAppConfig),\n inspectTransaction: fromPromise(\n ({ input }: { input: SignTransactionDAInput }) =>\n inspectTransaction({ serializedTransaction: input.transaction }),\n ),\n buildContext: fromPromise(buildContext),\n provideContext: fromPromise(provideContext),\n signTransaction: fromPromise(signTransaction),\n },\n guards: {\n noInternalError: ({ context }) => context._internalState.error === null,\n skipOpenApp: ({ context }) => context.input.skipOpenApp,\n isSPLSupported: ({ context }) =>\n new ApplicationChecker(\n internalApi.getDeviceSessionState(),\n context._internalState.appConfig!,\n )\n .withMinVersionExclusive(\"1.4.0\")\n .excludeDeviceModel(DeviceModelId.NANO_S)\n .check(),\n isAnSPLTransaction: ({ context }) =>\n context._internalState.inspectorResult?.transactionType ===\n SolanaTransactionTypes.SPL,\n },\n actions: {\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: new UnknownDAError(\n _.event[\"error\"] instanceof Error\n ? _.event[\"error\"].message\n : String(_.event[\"error\"]),\n ),\n }),\n }),\n },\n }).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QGUCWUB2AVATgQw1jwGMAXVAewwBEwA3VYsAQTMowDoBJDVcvADbJSeUmADEAbQAMAXUSgADhVh92CkAA9EARgDsAZg4AOPdL37pAFj1WArACYANCACeuh4Y46dxgGzSBnZ6AQZ6dgC+ES5omLgERGxUtAxMrORU3Lz8QiJiUjrySCDKqhkYGtoI+kam5pY29s5uujrSxhzSAJw+AcZWplZ+BlEx6Nj4hCTlKYwsSZwA8opgGMyKirNpC+IQVGAcqBh0FADWBxQraxvComAAsiQAFkdgMkVKKmpUlYjhOhw7F0bAYrAN9HZrC53NV2lZAV1AnYrGEul0wpFoiBYhMEtN2Ft5uUOABhJ5gYinZardabehzdLsABKcAArgJSFI5BpSt8KsUqjoDDoHJ0ug5jAY6jowbZoa0ZYDpHYfA59A47H4BqNseN4lMFoTGZkyRSqVdaUaFizYOzOZJCjyvuVftVhaLuhKpWYZY15QhjADpH4HAMQ0FzOEujqcfrEjN6dtiQBxMCkWkkqgAM3Qu32h2OZwOMHTG0zGBzUHeTrK6gFukDeg4fj04Slwbavis-pFAw4en6wSGfmRXWMMb1k3jBMTRPYHFTpcU5cr4jAOBwFBwHEUAlEWa3AFsOCWM9n0NXiryXfXqo3m627O2-J3+j20RwHIjhiHPAOrIEE5xFO+LJLOxqcIuZ4VugNp2qalJch8JTOnWoBVA4njwv0OiOFYaohNIwY9p4HR+GiGrGNYAEOEEQG4gaCapHOmRQWW55QHBHIIacBTIdeaFaIgmG2CYVi4aGBEBMRLQIKCQY6F0QIigY0iKdGWKxiBhrgQsWSwCsZBxqBGB5hgBxHCc5wFgZFKkMZCyXp8tY-LeEr4f2yKmGOwyGF0JHkRwYQGORxj+C2fgtvRDlMQyek8LZRnaeUa4bluO57qQB44MeRyJfZyXsE5KEufy6HCf0orhAMeg+cF-myfYXSfjYtgiphiLIn40WFWBzEQRwzBZmIOAJYZ9rcleqGueVcmYUYtFdC2spSphPYih0QxLX4gbCqCdiYmMwF4jp-V6UNI1jXZfE1nyroGPNn4GEttggsYa2yUK0iilYSkorRaqqQYIyaZOJ2xUm84XeuV1kFIDj8dNZVCXNtFPS9K3vc0MLSRwXQhFqkZKYpOg9eDM5ncSABCrKoAIEDlmImicns5kFlZBwAEa0-TjNgMzxUCTNKNhDYn5jqpA6guJB3rWjNiOARX74-YZOMRTcXUzzDNUEznLrpu267vuR4cNzdM6xgeuC0j922E2X6SuYkpgrhdj+hYzUONY-QK8Y4o7Wr059Zr84AAqbgwEBgHzzNmRZhbWYokeoNHsekDbpWuvhYWAp4in9Pj4r2OtWr9p4yIE-0YXjqDx3qyHkOZBHFBRzHuv8-raVG5l2XHsnrep+3Vud5nd23jnHSOJ7he1aG7uyf40h48Dr3CgdAGHbq9fBzQunEi3bfp1xpA8Uht03rNCvYQO3T+IMIbrRYJhLUC3syvtQcmVaB8p2nHfMxPmfB0iMs4T2qiYW+PkH7Y10ERUUkUHBam9GqZEIMjoMV3j-ecWlyZUHjuzIsHBVA7xMmPS+KNHCSiCsCMEAQfRjhIgObwL4vwahJqwr+p1Q6ZFwQ3UyBt0rGyyqbEhmCyGTWcuPWaVCjDPTBEMcwalGGfRFMvf2cIBwqk1L4LhEMWKcD4bvIB5JELkMElUYIyJvDBEijYF8wweyqQ6OYAIkJhT6DClvIx39944LBvwkxZobpTTATIiBuECb2J0I4z6SCEEFzsO9NErZAxRCxBgCg0d4DFB8dwpuyMhbIyqAAWj8P6Epdg8ZohqbUmpX49EawKVkNQghbhiAvhYxA+EArwnIm0b6SC1JmG8QErBfjMjUmuHSSmgkin3QOs2bo5hHDbXEjoHswZl5fkUphAZ-gkGNMbgY0kpjzQ0g2NgqgJ9OnC0FERZerZES7X2Z4dawZOiPjaMYTUoUjl71maxNM0FKy3OKboSEP0RQ+HCFY-GsDqioI4DVAI3skn-FGaQ-JJy2LLg4kEykYLXTew1J0B6L5HCr1qgYJh2yLAqnaL4XCwN-lXM4LDAqeDCm2zckMKpMSVK-RbCFZUJEnzIuGe-GqIRSZ13Ediga0NRqEHGkS28qkdotQOWGQMxgSKIhMH0A6oIgieAcKyiZnAaYW3Tmq2a0sqnkWRJqAYalgx6E2QazxIq1IDCBhawFnBD5D1taE6RIs-rNlWU+HwQRIrlNUe0Zs1cJTKk1GYbqcqYpNJOcG-+I9AFsm4mcu1KMwRKRMFjcILZgw-NLkYIYpgQqBkhHoUMAaeGGLGSZUtVRfr2G8PjKiwIwiYQRe1JsT4-rPVwuib6Hbml5PKAS04vbECjkeb9SlkklINRhCKD8Wpfb+13WqTNGDs3HIGsgVkxAmCwByVIihlixzwlahiFUQo926FUthX0iJ8K-Xmguk5ABRbua6EBAn6Mi1sH7Y3foQIYJsQR1n42VEKRw6SIhAA */\n id: \"SignTransactionDeviceAction\",\n initial: \"InitialState\",\n context: ({ input }) => ({\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n _internalState: {\n error: null,\n signature: null,\n appConfig: null,\n solanaTransactionContext: null,\n inspectorResult: null,\n },\n }),\n states: {\n InitialState: {\n always: [\n { target: \"GetAppConfig\", guard: \"skipOpenApp\" },\n { target: \"OpenAppDeviceAction\" },\n ],\n },\n OpenAppDeviceAction: {\n exit: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n }),\n }),\n invoke: {\n id: \"openAppStateMachine\",\n src: \"openAppStateMachine\",\n input: () => ({ appName: \"Solana\" }),\n onSnapshot: {\n actions: assign({\n intermediateValue: ({ event }) =>\n event.snapshot.context.intermediateValue,\n }),\n },\n onDone: {\n target: \"CheckOpenAppDeviceActionResult\",\n actions: assign({\n _internalState: ({ event, context }) =>\n event.output.caseOf({\n Right: () => context._internalState,\n Left: (error) => ({\n ...context._internalState,\n error,\n }),\n }),\n }),\n },\n },\n },\n CheckOpenAppDeviceActionResult: {\n always: [\n { target: \"GetAppConfig\", guard: \"noInternalError\" },\n { target: \"Error\" },\n ],\n },\n GetAppConfig: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n }),\n }),\n invoke: {\n id: \"getAppConfig\",\n src: \"getAppConfig\",\n onDone: {\n target: \"GetAppConfigResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) =>\n isSuccessCommandResult(event.output)\n ? {\n ...context._internalState,\n appConfig: event.output.data,\n }\n : { ...context._internalState, error: event.output.error },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n GetAppConfigResultCheck: {\n always: [\n { target: \"InspectTransaction\", guard: \"noInternalError\" },\n { target: \"Error\" },\n ],\n },\n InspectTransaction: {\n invoke: {\n id: \"inspectTransaction\",\n src: \"inspectTransaction\",\n input: ({ context }) => ({\n ...context.input,\n serializedTransaction: context.input.transaction,\n }),\n onDone: {\n target: \"AfterInspect\",\n actions: assign({\n _internalState: ({ context, event }) => ({\n ...context._internalState,\n inspectorResult: event.output,\n }),\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n AfterInspect: {\n always: [\n { target: \"BuildContext\", guard: \"isAnSPLTransaction\" },\n { target: \"SignTransaction\", guard: \"noInternalError\" },\n { target: \"Error\" },\n ],\n },\n BuildContext: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n }),\n }),\n invoke: {\n id: \"buildContext\",\n src: \"buildContext\",\n input: ({ context }) => {\n const inspectorData =\n context._internalState.inspectorResult?.data;\n return {\n contextModule: context.input.contextModule,\n options: {\n tokenAddress: inspectorData?.tokenAddress,\n createATA: inspectorData?.createATA,\n },\n };\n },\n onDone: {\n target: \"ProvideContext\",\n actions: [\n assign({\n _internalState: ({ event, context }) => ({\n ...context._internalState,\n solanaTransactionContext: {\n descriptor: event.output.descriptor,\n certificate: event.output.calCertificate,\n tokenAccount: event.output.addressResult.tokenAccount,\n owner: event.output.addressResult.owner,\n contract: event.output.addressResult.contract,\n },\n }),\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n ProvideContext: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n }),\n }),\n invoke: {\n id: \"provideContext\",\n src: \"provideContext\",\n input: ({ context }) => {\n if (!context._internalState.solanaTransactionContext) {\n throw new UnknownDAError(\n \"Solana transaction context is not available\",\n );\n }\n return context._internalState.solanaTransactionContext;\n },\n onDone: {\n target: \"ProvideContextResultCheck\",\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n ProvideContextResultCheck: {\n always: [\n { target: \"SignTransaction\", guard: \"noInternalError\" },\n { target: \"Error\" },\n ],\n },\n SignTransaction: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n },\n }),\n exit: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n }),\n invoke: {\n id: \"signTransaction\",\n src: \"signTransaction\",\n input: ({ context }) => {\n return {\n derivationPath: context.input.derivationPath,\n serializedTransaction: context.input.transaction,\n };\n },\n onDone: {\n target: \"SignTransactionResultCheck\",\n actions: [\n assign({\n _internalState: ({ event, context }) => {\n if (!isSuccessCommandResult(event.output))\n return {\n ...context._internalState,\n error: event.output.error,\n };\n\n const data = event.output.data.extract();\n if (\n event.output.data.isJust() &&\n data instanceof Uint8Array\n )\n return {\n ...context._internalState,\n signature: data,\n };\n\n return {\n ...context._internalState,\n error: new UnknownDAError(\"No Signature available\"),\n };\n },\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n SignTransactionResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"Success\" },\n { target: \"Error\" },\n ],\n },\n Success: { type: \"final\" },\n Error: { type: \"final\" },\n },\n output: ({ context }) =>\n context._internalState.signature\n ? Right(context._internalState.signature)\n : Left(\n context._internalState.error ||\n new UnknownDAError(`No error or signature available`),\n ),\n });\n }\n\n extractDependencies(internalApi: InternalApi): MachineDependencies {\n const getAppConfig = async () =>\n internalApi.sendCommand(new GetAppConfigurationCommand());\n\n const buildContext = async (arg0: {\n input: BuildTransactionContextTaskArgs;\n }) => new BuildTransactionContextTask(internalApi, arg0.input).run();\n\n const provideContext = async (arg0: { input: SolanaContextForDevice }) =>\n new ProvideSolanaTransactionContextTask(internalApi, arg0.input).run();\n\n const inspectTransaction = async (arg0: {\n serializedTransaction: Uint8Array;\n }) =>\n Promise.resolve(\n new TransactionInspector(\n arg0.serializedTransaction,\n ).inspectTransactionType(),\n );\n\n const signTransaction = async (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n };\n }) =>\n new SignDataTask(internalApi, {\n commandFactory: (args) =>\n new SignTransactionCommand({\n serializedTransaction: args.chunkedData,\n more: args.more,\n extend: args.extend,\n }),\n derivationPath: arg0.input.derivationPath,\n sendingData: arg0.input.serializedTransaction,\n }).run();\n\n return {\n getAppConfig,\n buildContext,\n provideContext,\n signTransaction,\n inspectTransaction,\n };\n }\n}\n"],
|
|
5
|
-
"mappings": "AAAA,OAIE,iBAAAA,EAEA,0BAAAC,EACA,uBAAAC,EAEA,kBAAAC,EACA,2BAAAC,EACA,sBAAAC,MACK,kCACP,OAAS,QAAAC,EAAkB,SAAAC,MAAa,YACxC,OAAS,UAAAC,EAAQ,eAAAC,EAAa,SAAAC,MAAa,
|
|
4
|
+
"sourcesContent": ["import {\n type CommandErrorResult,\n type CommandResult,\n type DeviceActionStateMachine,\n DeviceModelId,\n type InternalApi,\n isSuccessCommandResult,\n OpenAppDeviceAction,\n type StateMachineTypes,\n UnknownDAError,\n UserInteractionRequired,\n XStateDeviceAction,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, type Maybe, Right } from \"purify-ts\";\nimport { assign, fromPromise, setup } from \"xstate\";\n\nimport {\n type SignTransactionDAError,\n type SignTransactionDAInput,\n type SignTransactionDAIntermediateValue,\n type SignTransactionDAInternalState,\n type SignTransactionDAOutput,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\nimport { type Signature } from \"@api/model/Signature\";\nimport { type TransactionResolutionContext } from \"@api/model/TransactionResolutionContext\";\nimport { GetAppConfigurationCommand } from \"@internal/app-binder/command/GetAppConfigurationCommand\";\nimport { SignTransactionCommand } from \"@internal/app-binder/command/SignTransactionCommand\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport { ApplicationChecker } from \"@internal/app-binder/services/ApplicationChecker\";\nimport {\n SolanaTransactionTypes,\n TransactionInspector,\n} from \"@internal/app-binder/services/TransactionInspector\";\nimport { type TxInspectorResult } from \"@internal/app-binder/services/utils/transactionDecoders\";\nimport {\n BuildTransactionContextTask,\n type BuildTransactionContextTaskArgs,\n type SolanaBuildContextResult,\n} from \"@internal/app-binder/task/BuildTransactionContextTask\";\nimport {\n ProvideSolanaTransactionContextTask,\n type SolanaContextForDevice,\n} from \"@internal/app-binder/task/ProvideTransactionContextTask\";\nimport { SignDataTask } from \"@internal/app-binder/task/SendSignDataTask\";\n\nexport type MachineDependencies = {\n readonly getAppConfig: () => Promise<\n CommandResult<AppConfiguration, SolanaAppErrorCodes>\n >;\n readonly buildContext: (arg0: {\n input: BuildTransactionContextTaskArgs;\n }) => Promise<SolanaBuildContextResult>;\n readonly provideContext: (arg0: {\n input: SolanaContextForDevice;\n }) => Promise<Maybe<CommandErrorResult<SolanaAppErrorCodes>>>;\n readonly inspectTransaction: (arg0: {\n serializedTransaction: Uint8Array;\n }) => Promise<TxInspectorResult>;\n readonly signTransaction: (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n };\n }) => Promise<\n CommandResult<Maybe<Signature | SolanaAppErrorCodes>, SolanaAppErrorCodes>\n >;\n};\n\nexport class SignTransactionDeviceAction extends XStateDeviceAction<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n> {\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n > {\n type types = StateMachineTypes<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n >;\n\n const {\n signTransaction,\n getAppConfig,\n buildContext,\n provideContext,\n inspectTransaction,\n } = this.extractDependencies(internalApi);\n\n return setup({\n types: {\n input: {} as types[\"input\"],\n context: {} as types[\"context\"],\n output: {} as types[\"output\"],\n },\n actors: {\n openAppStateMachine: new OpenAppDeviceAction({\n input: { appName: \"Solana\" },\n }).makeStateMachine(internalApi),\n getAppConfig: fromPromise(getAppConfig),\n inspectTransaction: fromPromise(\n ({ input }: { input: SignTransactionDAInput }) =>\n inspectTransaction({ serializedTransaction: input.transaction }),\n ),\n buildContext: fromPromise(buildContext),\n provideContext: fromPromise(provideContext),\n signTransaction: fromPromise(signTransaction),\n },\n guards: {\n noInternalError: ({ context }) => context._internalState.error === null,\n skipOpenApp: ({ context }) => context.input.skipOpenApp,\n isSPLSupported: ({ context }) =>\n new ApplicationChecker(\n internalApi.getDeviceSessionState(),\n context._internalState.appConfig!,\n )\n .withMinVersionExclusive(\"1.4.0\")\n .excludeDeviceModel(DeviceModelId.NANO_S)\n .check(),\n isAnSPLTransaction: ({ context }) =>\n context._internalState.inspectorResult?.transactionType ===\n SolanaTransactionTypes.SPL,\n shouldSkipInspection: ({ context }) =>\n context._internalState.error === null &&\n !!context.input.resolutionContext,\n },\n actions: {\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: new UnknownDAError(\n _.event[\"error\"] instanceof Error\n ? _.event[\"error\"].message\n : String(_.event[\"error\"]),\n ),\n }),\n }),\n },\n }).createMachine({\n id: \"SignTransactionDeviceAction\",\n initial: \"InitialState\",\n context: ({ input }) => ({\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n _internalState: {\n error: null,\n signature: null,\n appConfig: null,\n solanaTransactionContext: null,\n inspectorResult: null,\n },\n }),\n states: {\n InitialState: {\n always: [\n { target: \"GetAppConfig\", guard: \"skipOpenApp\" },\n { target: \"OpenAppDeviceAction\" },\n ],\n },\n OpenAppDeviceAction: {\n exit: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n }),\n }),\n invoke: {\n id: \"openAppStateMachine\",\n src: \"openAppStateMachine\",\n input: () => ({ appName: \"Solana\" }),\n onSnapshot: {\n actions: assign({\n intermediateValue: ({ event }) =>\n event.snapshot.context.intermediateValue,\n }),\n },\n onDone: {\n target: \"CheckOpenAppDeviceActionResult\",\n actions: assign({\n _internalState: ({ event, context }) =>\n event.output.caseOf({\n Right: () => context._internalState,\n Left: (error) => ({\n ...context._internalState,\n error,\n }),\n }),\n }),\n },\n },\n },\n CheckOpenAppDeviceActionResult: {\n always: [\n { target: \"GetAppConfig\", guard: \"noInternalError\" },\n { target: \"Error\" },\n ],\n },\n GetAppConfig: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n }),\n }),\n invoke: {\n id: \"getAppConfig\",\n src: \"getAppConfig\",\n onDone: {\n target: \"GetAppConfigResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) =>\n isSuccessCommandResult(event.output)\n ? {\n ...context._internalState,\n appConfig: event.output.data,\n }\n : { ...context._internalState, error: event.output.error },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n GetAppConfigResultCheck: {\n always: [\n { target: \"InspectTransaction\", guard: \"noInternalError\" },\n { target: \"Error\" },\n ],\n },\n InspectTransaction: {\n invoke: {\n id: \"inspectTransaction\",\n src: \"inspectTransaction\",\n input: ({ context }) => ({\n ...context.input,\n serializedTransaction: context.input.transaction,\n }),\n onDone: {\n target: \"AfterInspect\",\n actions: assign({\n _internalState: ({ context, event }) => ({\n ...context._internalState,\n inspectorResult: event.output,\n }),\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n AfterInspect: {\n always: [\n { target: \"BuildContext\", guard: \"isAnSPLTransaction\" },\n { target: \"SignTransaction\", guard: \"noInternalError\" },\n { target: \"Error\" },\n ],\n },\n BuildContext: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n }),\n }),\n invoke: {\n id: \"buildContext\",\n src: \"buildContext\",\n input: ({ context }) => {\n const inspectorData =\n context._internalState.inspectorResult?.data;\n return {\n contextModule: context.input.contextModule,\n options: {\n tokenAddress: inspectorData?.tokenAddress,\n createATA: inspectorData?.createATA,\n },\n };\n },\n onDone: {\n target: \"ProvideContext\",\n actions: [\n assign({\n _internalState: ({ event, context }) => ({\n ...context._internalState,\n solanaTransactionContext: {\n descriptor: event.output.descriptor,\n certificate: event.output.calCertificate,\n tokenAccount: event.output.addressResult.tokenAccount,\n owner: event.output.addressResult.owner,\n contract: event.output.addressResult.contract,\n },\n }),\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n ProvideContext: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n }),\n }),\n invoke: {\n id: \"provideContext\",\n src: \"provideContext\",\n input: ({ context }) => {\n if (!context._internalState.solanaTransactionContext) {\n throw new UnknownDAError(\n \"Solana transaction context is not available\",\n );\n }\n return context._internalState.solanaTransactionContext;\n },\n onDone: {\n target: \"ProvideContextResultCheck\",\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n ProvideContextResultCheck: {\n always: [\n { target: \"SignTransaction\", guard: \"noInternalError\" },\n { target: \"Error\" },\n ],\n },\n SignTransaction: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n },\n }),\n exit: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n }),\n invoke: {\n id: \"signTransaction\",\n src: \"signTransaction\",\n input: ({ context }) => {\n return {\n derivationPath: context.input.derivationPath,\n serializedTransaction: context.input.transaction,\n };\n },\n onDone: {\n target: \"SignTransactionResultCheck\",\n actions: [\n assign({\n _internalState: ({ event, context }) => {\n if (!isSuccessCommandResult(event.output))\n return {\n ...context._internalState,\n error: event.output.error,\n };\n\n const data = event.output.data.extract();\n if (\n event.output.data.isJust() &&\n data instanceof Uint8Array\n )\n return {\n ...context._internalState,\n signature: data,\n };\n\n return {\n ...context._internalState,\n error: new UnknownDAError(\"No Signature available\"),\n };\n },\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n SignTransactionResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"Success\" },\n { target: \"Error\" },\n ],\n },\n Success: { type: \"final\" },\n Error: { type: \"final\" },\n },\n output: ({ context }) =>\n context._internalState.signature\n ? Right(context._internalState.signature)\n : Left(\n context._internalState.error ||\n new UnknownDAError(`No error or signature available`),\n ),\n });\n }\n\n extractDependencies(internalApi: InternalApi): MachineDependencies {\n const getAppConfig = async () =>\n internalApi.sendCommand(new GetAppConfigurationCommand());\n\n const buildContext = async (arg0: {\n input: BuildTransactionContextTaskArgs;\n }) => new BuildTransactionContextTask(internalApi, arg0.input).run();\n\n const provideContext = async (arg0: { input: SolanaContextForDevice }) =>\n new ProvideSolanaTransactionContextTask(internalApi, arg0.input).run();\n\n const inspectTransaction = async (arg0: {\n serializedTransaction: Uint8Array;\n resolutionContext?: TransactionResolutionContext;\n }) =>\n Promise.resolve(\n new TransactionInspector(\n arg0.serializedTransaction,\n arg0.resolutionContext?.tokenAddress || null,\n arg0.resolutionContext?.createATA || null,\n ).inspectTransactionType(),\n );\n\n const signTransaction = async (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n };\n }) =>\n new SignDataTask(internalApi, {\n commandFactory: (args) =>\n new SignTransactionCommand({\n serializedTransaction: args.chunkedData,\n more: args.more,\n extend: args.extend,\n }),\n derivationPath: arg0.input.derivationPath,\n sendingData: arg0.input.serializedTransaction,\n }).run();\n\n return {\n getAppConfig,\n buildContext,\n provideContext,\n signTransaction,\n inspectTransaction,\n };\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["DeviceModelId", "isSuccessCommandResult", "OpenAppDeviceAction", "UnknownDAError", "UserInteractionRequired", "XStateDeviceAction", "Left", "Right", "assign", "fromPromise", "setup", "GetAppConfigurationCommand", "SignTransactionCommand", "ApplicationChecker", "SolanaTransactionTypes", "TransactionInspector", "BuildTransactionContextTask", "ProvideSolanaTransactionContextTask", "SignDataTask", "SignTransactionDeviceAction", "internalApi", "signTransaction", "getAppConfig", "buildContext", "provideContext", "inspectTransaction", "input", "context", "_", "event", "error", "inspectorData", "data", "arg0", "args"]
|
|
7
7
|
}
|
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
import{
|
|
2
|
-
`+n.map((t,r)=>`${r+1}) ${t}`).join(`
|
|
3
|
-
`))}}export{f as SolanaTransactionTypes,x as TransactionInspector};
|
|
1
|
+
import{ASSOCIATED_TOKEN_PROGRAM_ID as g,TOKEN_2022_PROGRAM_ID as T,TOKEN_PROGRAM_ID as K}from"@solana/spl-token";import{Connection as b,Transaction as P,TransactionInstruction as x,VersionedMessage as k,VersionedTransaction as S}from"@solana/web3.js";import{Buffer as p}from"buffer";import{DECODERS as h}from"../../app-binder/services/utils/transactionDecoders";var L=(t=>(t.STANDARD="Standard",t.SPL="SPL",t))(L||{});const D="http://api.mainnet-beta.solana.com/",R=new b(D,{commitment:"confirmed"}),A=d=>!!d&&(d.equals(g)||d.equals(K)||d.equals(T));class _{constructor(n,t,s){this.rawTransactionBytes=n;this.tokenAddress=t;this.createATA=s}async inspectTransactionType(){try{const n=await this.normaliseMessage(this.rawTransactionBytes);if(this.tokenAddress||this.createATA){const t=n.compiledInstructions.some(a=>A(n.allKeys[a.programIdIndex])),s={};return this.tokenAddress&&(s.tokenAddress=this.tokenAddress),this.createATA&&(s.createATA=this.createATA,!s.mintAddress&&this.createATA.mintAddress&&(s.mintAddress=this.createATA.mintAddress)),{transactionType:t?"SPL":"Standard",data:s}}for(const t of n.compiledInstructions){const s=n.allKeys[t.programIdIndex];if(!s)continue;const a=t.accountKeyIndexes.map(o=>n.allKeys[o]).filter(o=>!!o),u=new x({programId:s,keys:a.map(o=>({pubkey:o,isSigner:!1,isWritable:!1})),data:p.from(t.data)}),i={programId:s,ixMeta:t,message:n,instruction:u};for(const o of h){if(!o.when(i))continue;const l=o.decode(i);if(l)return{transactionType:"SPL",data:l}}if(A(s))return{transactionType:"SPL",data:{}}}return{transactionType:"Standard",data:{}}}catch{return{transactionType:"Standard",data:{}}}}async normaliseMessage(n){const t=this.tryDeserialiseVersioned(n);if(t){const e=t.message,r=await M(e);let m;return typeof e.getAccountKeys=="function"?m=e.getAccountKeys(r?{accountKeysFromLookups:r}:void 0).keySegments().flat():m=[...e.staticAccountKeys],{compiledInstructions:e.compiledInstructions.map(c=>{const f=c,I=Array.from(f.accounts??c.accountKeyIndexes??[]);let y;return c.data instanceof Uint8Array?y=c.data:typeof c.data=="string"?y=p.from(c.data,"base64"):y=Uint8Array.from(c.data??[]),{programIdIndex:c.programIdIndex,accountKeyIndexes:I,data:y}}),allKeys:m}}const s=P.from(n),a=new Map,u=e=>{if(!e)return;const r=e.toBase58();a.has(r)||a.set(r,e)};u(s.feePayer??null);for(const e of s.instructions){u(e.programId);for(const r of e.keys)u(r.pubkey)}const i=Array.from(a.values()),o=new Map(i.map((e,r)=>[e.toBase58(),r]));return{compiledInstructions:s.instructions.map(e=>({programIdIndex:o.get(e.programId.toBase58())??-1,accountKeyIndexes:e.keys.map(r=>o.get(r.pubkey.toBase58())??-1),data:e.data})),allKeys:i}}tryDeserialiseVersioned(n){try{return S.deserialize(n)}catch{try{return{message:k.deserialize(n)}}catch{return null}}}}async function M(d){const n=d.addressTableLookups??[];if(!n.length)return;const t=[],s=[];return await Promise.all(n.map(async a=>{const i=(await R.getAddressLookupTable(a.accountKey)).value;if(!i)return;const o=i.state.addresses;for(const l of a.writableIndexes??[]){const e=o[l];e&&t.push(e)}for(const l of a.readonlyIndexes??[]){const e=o[l];e&&s.push(e)}})),{writable:t,readonly:s}}export{L as SolanaTransactionTypes,_ as TransactionInspector};
|
|
4
2
|
//# sourceMappingURL=TransactionInspector.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/services/TransactionInspector.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n
|
|
5
|
-
"mappings": "AAAA,OACE,
|
|
6
|
-
"names": ["
|
|
4
|
+
"sourcesContent": ["import {\n ASSOCIATED_TOKEN_PROGRAM_ID,\n TOKEN_2022_PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n} from \"@solana/spl-token\";\nimport {\n Connection,\n type PublicKey,\n Transaction,\n TransactionInstruction,\n VersionedMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { Buffer } from \"buffer\";\n\nimport {\n DECODERS,\n type IxContext,\n type TxInspectorResult,\n} from \"@internal/app-binder/services/utils/transactionDecoders\";\n\nexport enum SolanaTransactionTypes {\n STANDARD = \"Standard\",\n SPL = \"SPL\",\n}\n\nexport type NormalizedCompiledIx = {\n programIdIndex: number;\n accountKeyIndexes: number[];\n data: Uint8Array;\n};\n\nexport type NormalizedMessage = {\n compiledInstructions: NormalizedCompiledIx[];\n allKeys: PublicKey[];\n};\n\ntype LoadedAddresses = { writable: PublicKey[]; readonly: PublicKey[] };\n\nconst RPC_URL = \"http://api.mainnet-beta.solana.com/\";\n\nconst defaultConnection = new Connection(RPC_URL, { commitment: \"confirmed\" });\n\nconst isSPLProgramId = (pid: PublicKey | undefined) =>\n !!pid &&\n (pid.equals(ASSOCIATED_TOKEN_PROGRAM_ID) ||\n pid.equals(TOKEN_PROGRAM_ID) ||\n pid.equals(TOKEN_2022_PROGRAM_ID));\n\nexport class TransactionInspector {\n constructor(\n private readonly rawTransactionBytes: Uint8Array,\n private readonly tokenAddress?: string | null,\n private readonly createATA?: {\n address: string;\n mintAddress: string;\n } | null,\n ) {}\n\n public async inspectTransactionType(): Promise<TxInspectorResult> {\n try {\n const message = await this.normaliseMessage(this.rawTransactionBytes);\n\n // If tokenAddress or createATA is provided, use those directly\n // and only classify SPL vs Standard by scanning program IDs.\n if (this.tokenAddress || this.createATA) {\n const looksSPL = message.compiledInstructions.some((ix) =>\n isSPLProgramId(message.allKeys[ix.programIdIndex]),\n );\n\n const data: TxInspectorResult[\"data\"] = {};\n if (this.tokenAddress) data.tokenAddress = this.tokenAddress;\n if (this.createATA) {\n data.createATA = this.createATA;\n // If mint is known from createATA and caller didn't pass mintAddress explicitly,\n // populate it so downstream UI has the same shape as decoder output.\n if (!data.mintAddress && this.createATA.mintAddress) {\n data.mintAddress = this.createATA.mintAddress;\n }\n }\n\n return {\n transactionType: looksSPL\n ? SolanaTransactionTypes.SPL\n : SolanaTransactionTypes.STANDARD,\n data,\n };\n }\n\n // Normal path: decode from the message\n for (const ixMeta of message.compiledInstructions) {\n const programId = message.allKeys[ixMeta.programIdIndex];\n if (!programId) continue;\n\n const resolvedKeys = ixMeta.accountKeyIndexes\n .map((i) => message.allKeys[i])\n .filter((key): key is PublicKey => !!key);\n\n // Build an instruction even with partial keys; decoders handle missing fields gracefully.\n const instruction = new TransactionInstruction({\n programId,\n keys: resolvedKeys.map((key) => ({\n pubkey: key,\n isSigner: false,\n isWritable: false,\n })),\n data: Buffer.from(ixMeta.data),\n });\n\n const ctx: IxContext = { programId, ixMeta, message, instruction };\n\n for (const decoder of DECODERS) {\n if (!decoder.when(ctx)) continue;\n const data = decoder.decode(ctx);\n if (data) {\n return { transactionType: SolanaTransactionTypes.SPL, data };\n }\n }\n\n if (isSPLProgramId(programId)) {\n return { transactionType: SolanaTransactionTypes.SPL, data: {} };\n }\n }\n\n return { transactionType: SolanaTransactionTypes.STANDARD, data: {} };\n } catch {\n return { transactionType: SolanaTransactionTypes.STANDARD, data: {} };\n }\n }\n\n /**\n * Normalise any tx (legacy or v0) into { compiledInstructions, allKeys }.\n * For v0, we auto-fetch looked-up addresses from ALT(s) via the baked-in connection.\n */\n private async normaliseMessage(\n rawBytes: Uint8Array,\n ): Promise<NormalizedMessage> {\n const versionedTX = this.tryDeserialiseVersioned(rawBytes);\n if (versionedTX) {\n const msg = versionedTX.message as VersionedMessage & {\n getAccountKeys?: (options?: {\n accountKeysFromLookups?: LoadedAddresses;\n }) => {\n staticAccountKeys: PublicKey[];\n accountKeysFromLookups?: LoadedAddresses;\n keySegments: () => PublicKey[][];\n };\n compiledInstructions: Array<{\n programIdIndex: number;\n accountKeyIndexes?: number[]; // legacy field name\n accounts?: number[]; // v0 field name\n data: Uint8Array | string | number[];\n }>;\n staticAccountKeys: PublicKey[];\n };\n\n const lookedUp = await resolveLookedUpAddressesFromMessage(msg);\n\n let allKeys: PublicKey[];\n if (typeof msg.getAccountKeys === \"function\") {\n const messageAccountKeys = msg.getAccountKeys(\n lookedUp ? { accountKeysFromLookups: lookedUp } : undefined,\n );\n allKeys = messageAccountKeys.keySegments().flat();\n } else {\n allKeys = [...msg.staticAccountKeys];\n }\n\n const compiledInstructions: NormalizedCompiledIx[] =\n msg.compiledInstructions.map((ix) => {\n const ixWithAccounts = ix as typeof ix & { accounts?: number[] };\n const accountKeyIndexes = Array.from(\n ixWithAccounts.accounts ?? ix.accountKeyIndexes ?? [],\n ) as number[];\n\n let data: Uint8Array;\n if (ix.data instanceof Uint8Array) {\n data = ix.data;\n } else if (typeof ix.data === \"string\") {\n data = Buffer.from(ix.data, \"base64\"); // v0 encodes instruction data as base64\n } else {\n data = Uint8Array.from(ix.data ?? []);\n }\n\n return {\n programIdIndex: ix.programIdIndex,\n accountKeyIndexes,\n data,\n };\n });\n\n return { compiledInstructions, allKeys };\n }\n\n // Legacy (no ALTs)\n const legacy = Transaction.from(rawBytes);\n\n const allKeyMap = new Map<string, PublicKey>();\n const add = (pubkey?: PublicKey | null) => {\n if (!pubkey) return;\n const key = pubkey.toBase58();\n if (!allKeyMap.has(key)) allKeyMap.set(key, pubkey);\n };\n\n add(legacy.feePayer ?? null);\n for (const ix of legacy.instructions) {\n add(ix.programId);\n for (const key of ix.keys) add(key.pubkey);\n }\n const allKeys = Array.from(allKeyMap.values());\n const indexByB58 = new Map(allKeys.map((pk, i) => [pk.toBase58(), i]));\n\n const compiledInstructions: NormalizedCompiledIx[] =\n legacy.instructions.map((ix) => ({\n programIdIndex: indexByB58.get(ix.programId.toBase58()) ?? -1,\n accountKeyIndexes: ix.keys.map(\n (key) => indexByB58.get(key.pubkey.toBase58()) ?? -1,\n ),\n data: ix.data,\n }));\n\n return { compiledInstructions, allKeys };\n }\n\n private tryDeserialiseVersioned(\n rawBytes: Uint8Array,\n ): VersionedTransaction | null {\n try {\n return VersionedTransaction.deserialize(rawBytes);\n } catch {\n try {\n const msg = VersionedMessage.deserialize(rawBytes);\n // Wrap in a dummy VersionedTransaction-like shape just for uniform handling\n return { message: msg } as VersionedTransaction;\n } catch {\n return null;\n }\n }\n }\n}\n\n// fetch looked-up addresses for a VersionedMessage via the baked-in connection\nasync function resolveLookedUpAddressesFromMessage(\n msg: VersionedMessage,\n): Promise<LoadedAddresses | undefined> {\n const lookups = msg.addressTableLookups ?? [];\n if (!lookups.length) return;\n\n const writable: PublicKey[] = [];\n const readonly: PublicKey[] = [];\n\n await Promise.all(\n lookups.map(async (lu) => {\n const res = await defaultConnection.getAddressLookupTable(lu.accountKey);\n const table = res.value;\n if (!table) return;\n const addrs = table.state.addresses;\n\n for (const i of lu.writableIndexes ?? []) {\n const pk = addrs[i];\n if (pk) writable.push(pk);\n }\n for (const i of lu.readonlyIndexes ?? []) {\n const pk = addrs[i];\n if (pk) readonly.push(pk);\n }\n }),\n );\n\n return { writable, readonly };\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OACE,+BAAAA,EACA,yBAAAC,EACA,oBAAAC,MACK,oBACP,OACE,cAAAC,EAEA,eAAAC,EACA,0BAAAC,EACA,oBAAAC,EACA,wBAAAC,MACK,kBACP,OAAS,UAAAC,MAAc,SAEvB,OACE,YAAAC,MAGK,0DAEA,IAAKC,OACVA,EAAA,SAAW,WACXA,EAAA,IAAM,MAFIA,OAAA,IAkBZ,MAAMC,EAAU,sCAEVC,EAAoB,IAAIT,EAAWQ,EAAS,CAAE,WAAY,WAAY,CAAC,EAEvEE,EAAkBC,GACtB,CAAC,CAACA,IACDA,EAAI,OAAOd,CAA2B,GACrCc,EAAI,OAAOZ,CAAgB,GAC3BY,EAAI,OAAOb,CAAqB,GAE7B,MAAMc,CAAqB,CAChC,YACmBC,EACAC,EACAC,EAIjB,CANiB,yBAAAF,EACA,kBAAAC,EACA,eAAAC,CAIhB,CAEH,MAAa,wBAAqD,CAChE,GAAI,CACF,MAAMC,EAAU,MAAM,KAAK,iBAAiB,KAAK,mBAAmB,EAIpE,GAAI,KAAK,cAAgB,KAAK,UAAW,CACvC,MAAMC,EAAWD,EAAQ,qBAAqB,KAAME,GAClDR,EAAeM,EAAQ,QAAQE,EAAG,cAAc,CAAC,CACnD,EAEMC,EAAkC,CAAC,EACzC,OAAI,KAAK,eAAcA,EAAK,aAAe,KAAK,cAC5C,KAAK,YACPA,EAAK,UAAY,KAAK,UAGlB,CAACA,EAAK,aAAe,KAAK,UAAU,cACtCA,EAAK,YAAc,KAAK,UAAU,cAI/B,CACL,gBAAiBF,EACb,MACA,WACJ,KAAAE,CACF,CACF,CAGA,UAAWC,KAAUJ,EAAQ,qBAAsB,CACjD,MAAMK,EAAYL,EAAQ,QAAQI,EAAO,cAAc,EACvD,GAAI,CAACC,EAAW,SAEhB,MAAMC,EAAeF,EAAO,kBACzB,IAAKG,GAAMP,EAAQ,QAAQO,CAAC,CAAC,EAC7B,OAAQC,GAA0B,CAAC,CAACA,CAAG,EAGpCC,EAAc,IAAIvB,EAAuB,CAC7C,UAAAmB,EACA,KAAMC,EAAa,IAAKE,IAAS,CAC/B,OAAQA,EACR,SAAU,GACV,WAAY,EACd,EAAE,EACF,KAAMnB,EAAO,KAAKe,EAAO,IAAI,CAC/B,CAAC,EAEKM,EAAiB,CAAE,UAAAL,EAAW,OAAAD,EAAQ,QAAAJ,EAAS,YAAAS,CAAY,EAEjE,UAAWE,KAAWrB,EAAU,CAC9B,GAAI,CAACqB,EAAQ,KAAKD,CAAG,EAAG,SACxB,MAAMP,EAAOQ,EAAQ,OAAOD,CAAG,EAC/B,GAAIP,EACF,MAAO,CAAE,gBAAiB,MAA4B,KAAAA,CAAK,CAE/D,CAEA,GAAIT,EAAeW,CAAS,EAC1B,MAAO,CAAE,gBAAiB,MAA4B,KAAM,CAAC,CAAE,CAEnE,CAEA,MAAO,CAAE,gBAAiB,WAAiC,KAAM,CAAC,CAAE,CACtE,MAAQ,CACN,MAAO,CAAE,gBAAiB,WAAiC,KAAM,CAAC,CAAE,CACtE,CACF,CAMA,MAAc,iBACZO,EAC4B,CAC5B,MAAMC,EAAc,KAAK,wBAAwBD,CAAQ,EACzD,GAAIC,EAAa,CACf,MAAMC,EAAMD,EAAY,QAiBlBE,EAAW,MAAMC,EAAoCF,CAAG,EAE9D,IAAIG,EACJ,OAAI,OAAOH,EAAI,gBAAmB,WAIhCG,EAH2BH,EAAI,eAC7BC,EAAW,CAAE,uBAAwBA,CAAS,EAAI,MACpD,EAC6B,YAAY,EAAE,KAAK,EAEhDE,EAAU,CAAC,GAAGH,EAAI,iBAAiB,EA0B9B,CAAE,qBAtBPA,EAAI,qBAAqB,IAAKZ,GAAO,CACnC,MAAMgB,EAAiBhB,EACjBiB,EAAoB,MAAM,KAC9BD,EAAe,UAAYhB,EAAG,mBAAqB,CAAC,CACtD,EAEA,IAAIC,EACJ,OAAID,EAAG,gBAAgB,WACrBC,EAAOD,EAAG,KACD,OAAOA,EAAG,MAAS,SAC5BC,EAAOd,EAAO,KAAKa,EAAG,KAAM,QAAQ,EAEpCC,EAAO,WAAW,KAAKD,EAAG,MAAQ,CAAC,CAAC,EAG/B,CACL,eAAgBA,EAAG,eACnB,kBAAAiB,EACA,KAAAhB,CACF,CACF,CAAC,EAE4B,QAAAc,CAAQ,CACzC,CAGA,MAAMG,EAASnC,EAAY,KAAK2B,CAAQ,EAElCS,EAAY,IAAI,IAChBC,EAAOC,GAA8B,CACzC,GAAI,CAACA,EAAQ,OACb,MAAMf,EAAMe,EAAO,SAAS,EACvBF,EAAU,IAAIb,CAAG,GAAGa,EAAU,IAAIb,EAAKe,CAAM,CACpD,EAEAD,EAAIF,EAAO,UAAY,IAAI,EAC3B,UAAWlB,KAAMkB,EAAO,aAAc,CACpCE,EAAIpB,EAAG,SAAS,EAChB,UAAWM,KAAON,EAAG,KAAMoB,EAAId,EAAI,MAAM,CAC3C,CACA,MAAMS,EAAU,MAAM,KAAKI,EAAU,OAAO,CAAC,EACvCG,EAAa,IAAI,IAAIP,EAAQ,IAAI,CAACQ,EAAIlB,IAAM,CAACkB,EAAG,SAAS,EAAGlB,CAAC,CAAC,CAAC,EAWrE,MAAO,CAAE,qBARPa,EAAO,aAAa,IAAKlB,IAAQ,CAC/B,eAAgBsB,EAAW,IAAItB,EAAG,UAAU,SAAS,CAAC,GAAK,GAC3D,kBAAmBA,EAAG,KAAK,IACxBM,GAAQgB,EAAW,IAAIhB,EAAI,OAAO,SAAS,CAAC,GAAK,EACpD,EACA,KAAMN,EAAG,IACX,EAAE,EAE2B,QAAAe,CAAQ,CACzC,CAEQ,wBACNL,EAC6B,CAC7B,GAAI,CACF,OAAOxB,EAAqB,YAAYwB,CAAQ,CAClD,MAAQ,CACN,GAAI,CAGF,MAAO,CAAE,QAFGzB,EAAiB,YAAYyB,CAAQ,CAE3B,CACxB,MAAQ,CACN,OAAO,IACT,CACF,CACF,CACF,CAGA,eAAeI,EACbF,EACsC,CACtC,MAAMY,EAAUZ,EAAI,qBAAuB,CAAC,EAC5C,GAAI,CAACY,EAAQ,OAAQ,OAErB,MAAMC,EAAwB,CAAC,EACzBC,EAAwB,CAAC,EAE/B,aAAM,QAAQ,IACZF,EAAQ,IAAI,MAAOG,GAAO,CAExB,MAAMC,GADM,MAAMrC,EAAkB,sBAAsBoC,EAAG,UAAU,GACrD,MAClB,GAAI,CAACC,EAAO,OACZ,MAAMC,EAAQD,EAAM,MAAM,UAE1B,UAAWvB,KAAKsB,EAAG,iBAAmB,CAAC,EAAG,CACxC,MAAMJ,EAAKM,EAAMxB,CAAC,EACdkB,GAAIE,EAAS,KAAKF,CAAE,CAC1B,CACA,UAAWlB,KAAKsB,EAAG,iBAAmB,CAAC,EAAG,CACxC,MAAMJ,EAAKM,EAAMxB,CAAC,EACdkB,GAAIG,EAAS,KAAKH,CAAE,CAC1B,CACF,CAAC,CACH,EAEO,CAAE,SAAAE,EAAU,SAAAC,CAAS,CAC9B",
|
|
6
|
+
"names": ["ASSOCIATED_TOKEN_PROGRAM_ID", "TOKEN_2022_PROGRAM_ID", "TOKEN_PROGRAM_ID", "Connection", "Transaction", "TransactionInstruction", "VersionedMessage", "VersionedTransaction", "Buffer", "DECODERS", "SolanaTransactionTypes", "RPC_URL", "defaultConnection", "isSPLProgramId", "pid", "TransactionInspector", "rawTransactionBytes", "tokenAddress", "createATA", "message", "looksSPL", "ix", "data", "ixMeta", "programId", "resolvedKeys", "i", "key", "instruction", "ctx", "decoder", "rawBytes", "versionedTX", "msg", "lookedUp", "resolveLookedUpAddressesFromMessage", "allKeys", "ixWithAccounts", "accountKeyIndexes", "legacy", "allKeyMap", "add", "pubkey", "indexByB58", "pk", "lookups", "writable", "readonly", "lu", "table", "addrs"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ASSOCIATED_TOKEN_PROGRAM_ID as A,decodeBurnCheckedInstruction as p,decodeBurnInstruction as m,decodeCloseAccountInstruction as I,decodeFreezeAccountInstruction as b,decodeInitializeAccount2Instruction as T,decodeInitializeAccount3Instruction as B,decodeInitializeAccountInstruction as f,decodeInitializeImmutableOwnerInstruction as h,decodeSyncNativeInstruction as w,decodeThawAccountInstruction as x,decodeTransferCheckedInstruction as K,decodeTransferCheckedWithFeeInstruction as P,decodeTransferInstruction as C,getAssociatedTokenAddressSync as q,TOKEN_2022_PROGRAM_ID as k,TOKEN_PROGRAM_ID as l}from"@solana/spl-token";const d=e=>e.equals(l)||e.equals(k),o=e=>{try{return e()}catch{return null}},O=[{when:({programId:e})=>e.equals(A),decode:({ixMeta:e,message:t})=>{const n=a=>{const r=e.accountKeyIndexes[a];return r!==void 0?t.allKeys[r]??null:null},s=n(1);let u=n(2),c=n(3);if(!u||!c){const a=e.accountKeyIndexes.slice(2);for(const r of a){const i=t.allKeys[r];if(i){if(!u&&i!==s){u=i;continue}if(!c&&i!==s&&i!==u&&(c=i),u&&c)break}}}let y=null;for(const a of e.accountKeyIndexes){const r=t.allKeys[a];if(r&&(r.equals(l)||r.equals(k))){y=r;break}}if(!u||!c)return null;if(s)return{createATA:{address:s.toBase58(),mintAddress:c.toBase58()}};if(y){const a=y.equals(k);return{createATA:{address:q(c,u,!0,a?k:l,A).toBase58(),mintAddress:c.toBase58()}}}return null}},{when:({programId:e})=>e.equals(k),decode:({instruction:e,programId:t})=>o(()=>{const{keys:{destination:n,mint:s}}=P(e,t);return{tokenAddress:n.pubkey.toBase58(),mintAddress:s.pubkey.toBase58()}})},{when:({programId:e})=>d(e),decode:({instruction:e,programId:t})=>o(()=>{const{keys:{destination:n}}=C(e,t);return{tokenAddress:n.pubkey.toBase58()}})},{when:({programId:e})=>d(e),decode:({instruction:e,programId:t})=>o(()=>{const{keys:{destination:n,mint:s}}=K(e,t);return{tokenAddress:n.pubkey.toBase58(),mintAddress:s.pubkey.toBase58()}})},{when:({programId:e})=>d(e),decode:({instruction:e,programId:t})=>o(()=>{const{keys:{account:n,mint:s}}=f(e,t);return{createATA:{address:n.pubkey.toBase58(),mintAddress:s.pubkey.toBase58()}}})},{when:({programId:e})=>d(e),decode:({instruction:e,programId:t})=>o(()=>{const{keys:{account:n,mint:s}}=T(e,t);return{createATA:{address:n.pubkey.toBase58(),mintAddress:s.pubkey.toBase58()}}})},{when:({programId:e})=>d(e),decode:({instruction:e,programId:t})=>o(()=>{const{keys:{account:n,mint:s}}=B(e,t);return{createATA:{address:n.pubkey.toBase58(),mintAddress:s.pubkey.toBase58()}}})},{when:({programId:e})=>d(e),decode:({instruction:e,programId:t})=>o(()=>{const{keys:{account:n}}=h(e,t);return{tokenAddress:n.pubkey.toBase58()}})},{when:({programId:e})=>d(e),decode:({instruction:e,programId:t})=>o(()=>{const{keys:{account:n}}=I(e,t);return{tokenAddress:n.pubkey.toBase58()}})},{when:({programId:e})=>d(e),decode:({instruction:e,programId:t})=>o(()=>{const{keys:{account:n}}=w(e,t);return{tokenAddress:n.pubkey.toBase58()}})},{when:({programId:e})=>d(e),decode:({instruction:e,programId:t})=>o(()=>{const{keys:{account:n,mint:s}}=p(e,t);return{tokenAddress:n.pubkey.toBase58(),mintAddress:s.pubkey.toBase58()}})},{when:({programId:e})=>d(e),decode:({instruction:e,programId:t})=>o(()=>{const{keys:{account:n,mint:s}}=m(e,t);return{tokenAddress:n.pubkey.toBase58(),mintAddress:s.pubkey.toBase58()}})},{when:({programId:e})=>d(e),decode:({instruction:e,programId:t})=>o(()=>{const{keys:{account:n,mint:s}}=b(e,t);return{tokenAddress:n.pubkey.toBase58(),mintAddress:s.pubkey.toBase58()}})},{when:({programId:e})=>d(e),decode:({instruction:e,programId:t})=>o(()=>{const{keys:{account:n,mint:s}}=x(e,t);return{tokenAddress:n.pubkey.toBase58(),mintAddress:s.pubkey.toBase58()}})},{when:({programId:e})=>e.equals(A)||e.equals(l)||e.equals(k),decode:()=>({})}];export{O as DECODERS};
|
|
2
|
+
//# sourceMappingURL=transactionDecoders.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/internal/app-binder/services/utils/transactionDecoders.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n ASSOCIATED_TOKEN_PROGRAM_ID,\n decodeBurnCheckedInstruction,\n decodeBurnInstruction,\n decodeCloseAccountInstruction,\n decodeFreezeAccountInstruction,\n decodeInitializeAccount2Instruction,\n decodeInitializeAccount3Instruction,\n decodeInitializeAccountInstruction,\n decodeInitializeImmutableOwnerInstruction,\n decodeSyncNativeInstruction,\n decodeThawAccountInstruction,\n decodeTransferCheckedInstruction,\n decodeTransferCheckedWithFeeInstruction,\n decodeTransferInstruction,\n getAssociatedTokenAddressSync,\n TOKEN_2022_PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n} from \"@solana/spl-token\";\nimport { type PublicKey, type TransactionInstruction } from \"@solana/web3.js\";\n\nimport {\n type NormalizedCompiledIx,\n type NormalizedMessage,\n type SolanaTransactionTypes,\n} from \"@internal/app-binder/services/TransactionInspector\";\n\nexport interface TxInspectorResult {\n transactionType: SolanaTransactionTypes;\n data: {\n tokenAddress?: string;\n mintAddress?: string;\n createATA?: { address: string; mintAddress: string };\n };\n}\n\nexport type IxContext = {\n programId: PublicKey;\n ixMeta: NormalizedCompiledIx;\n message: NormalizedMessage;\n instruction: TransactionInstruction;\n};\n\nexport type Decoder = {\n when: (ctx: IxContext) => boolean;\n decode: (ctx: IxContext) => TxInspectorResult[\"data\"] | null;\n};\n\nconst isTokenProgramId = (pid: PublicKey) =>\n pid.equals(TOKEN_PROGRAM_ID) || pid.equals(TOKEN_2022_PROGRAM_ID);\n\nconst safe = <T>(fn: () => T): T | null => {\n try {\n return fn();\n } catch {\n return null;\n }\n};\n\nexport const DECODERS: Decoder[] = [\n // ATA creation (with derivation fallback)\n {\n when: ({ programId }) => programId.equals(ASSOCIATED_TOKEN_PROGRAM_ID),\n decode: ({ ixMeta, message }) => {\n // Helpers to read by ix index safely\n const byIdx = (n: number): PublicKey | null => {\n const i = ixMeta.accountKeyIndexes[n];\n return i !== undefined ? (message.allKeys[i] ?? null) : null;\n };\n\n // Common positions (fast path)\n const ataPk = byIdx(1);\n let ownerPk = byIdx(2);\n let mintPk = byIdx(3);\n\n // Recover owner/mint if they weren't in the usual slots\n if (!ownerPk || !mintPk) {\n const afterFirstTwo = ixMeta.accountKeyIndexes.slice(2);\n for (const k of afterFirstTwo) {\n const pk = message.allKeys[k];\n if (!pk) continue;\n if (!ownerPk && pk !== ataPk) {\n ownerPk = pk;\n continue;\n }\n if (!mintPk && pk !== ataPk && pk !== ownerPk) {\n mintPk = pk;\n }\n if (ownerPk && mintPk) break;\n }\n }\n\n // Find token program by VALUE anywhere (works for legacy or 2022)\n let tokenProgramPk: PublicKey | null = null;\n for (const k of ixMeta.accountKeyIndexes) {\n const pk = message.allKeys[k];\n if (!pk) continue;\n if (pk.equals(TOKEN_PROGRAM_ID) || pk.equals(TOKEN_2022_PROGRAM_ID)) {\n tokenProgramPk = pk;\n break;\n }\n }\n\n // Need owner+mint at minimum\n if (!ownerPk || !mintPk) return null;\n\n // If ATA pubkey was provided in the ix, trust it\n if (ataPk) {\n return {\n createATA: {\n address: ataPk.toBase58(),\n mintAddress: mintPk.toBase58(),\n },\n };\n }\n\n // If token program is present, derive deterministically\n if (tokenProgramPk) {\n const isV22 = tokenProgramPk.equals(TOKEN_2022_PROGRAM_ID);\n const derived = getAssociatedTokenAddressSync(\n mintPk,\n ownerPk,\n true, // allowOwnerOffCurve\n isV22 ? TOKEN_2022_PROGRAM_ID : TOKEN_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n );\n return {\n createATA: {\n address: derived.toBase58(),\n mintAddress: mintPk.toBase58(),\n },\n };\n }\n\n // No ATA + no token program \u2192 let outer logic decide (Token-2022 hint / ALT fetch / conservative)\n return null;\n },\n },\n\n // Token-2022 fee\u2019d transfer (CWIF)\n {\n when: ({ programId }) => programId.equals(TOKEN_2022_PROGRAM_ID),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { destination, mint },\n } = decodeTransferCheckedWithFeeInstruction(instruction, programId);\n return {\n tokenAddress: destination.pubkey.toBase58(),\n mintAddress: mint.pubkey.toBase58(),\n };\n }),\n },\n\n // Transfers\n {\n when: ({ programId }) => isTokenProgramId(programId),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { destination },\n } = decodeTransferInstruction(instruction, programId);\n return { tokenAddress: destination.pubkey.toBase58() };\n }),\n },\n {\n when: ({ programId }) => isTokenProgramId(programId),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { destination, mint },\n } = decodeTransferCheckedInstruction(instruction, programId);\n return {\n tokenAddress: destination.pubkey.toBase58(),\n mintAddress: mint.pubkey.toBase58(),\n };\n }),\n },\n\n // Account init\n {\n when: ({ programId }) => isTokenProgramId(programId),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { account, mint },\n } = decodeInitializeAccountInstruction(instruction, programId);\n return {\n createATA: {\n address: account.pubkey.toBase58(),\n mintAddress: mint.pubkey.toBase58(),\n },\n };\n }),\n },\n {\n when: ({ programId }) => isTokenProgramId(programId),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { account, mint },\n } = decodeInitializeAccount2Instruction(instruction, programId);\n return {\n createATA: {\n address: account.pubkey.toBase58(),\n mintAddress: mint.pubkey.toBase58(),\n },\n };\n }),\n },\n {\n when: ({ programId }) => isTokenProgramId(programId),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { account, mint },\n } = decodeInitializeAccount3Instruction(instruction, programId);\n return {\n createATA: {\n address: account.pubkey.toBase58(),\n mintAddress: mint.pubkey.toBase58(),\n },\n };\n }),\n },\n {\n when: ({ programId }) => isTokenProgramId(programId),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { account },\n } = decodeInitializeImmutableOwnerInstruction(instruction, programId);\n return { tokenAddress: account.pubkey.toBase58() };\n }),\n },\n\n // Lifecycle / WSOL\n {\n when: ({ programId }) => isTokenProgramId(programId),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { account },\n } = decodeCloseAccountInstruction(instruction, programId);\n return { tokenAddress: account.pubkey.toBase58() };\n }),\n },\n {\n when: ({ programId }) => isTokenProgramId(programId),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { account },\n } = decodeSyncNativeInstruction(instruction, programId);\n return { tokenAddress: account.pubkey.toBase58() };\n }),\n },\n\n // Mint / Burn\n {\n when: ({ programId }) => isTokenProgramId(programId),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { account, mint },\n } = decodeBurnCheckedInstruction(instruction, programId);\n return {\n tokenAddress: account.pubkey.toBase58(),\n mintAddress: mint.pubkey.toBase58(),\n };\n }),\n },\n {\n when: ({ programId }) => isTokenProgramId(programId),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { account, mint },\n } = decodeBurnInstruction(instruction, programId);\n return {\n tokenAddress: account.pubkey.toBase58(),\n mintAddress: mint.pubkey.toBase58(),\n };\n }),\n },\n\n // Freeze / Thaw\n {\n when: ({ programId }) => isTokenProgramId(programId),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { account, mint },\n } = decodeFreezeAccountInstruction(instruction, programId);\n return {\n tokenAddress: account.pubkey.toBase58(),\n mintAddress: mint.pubkey.toBase58(),\n };\n }),\n },\n {\n when: ({ programId }) => isTokenProgramId(programId),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { account, mint },\n } = decodeThawAccountInstruction(instruction, programId);\n return {\n tokenAddress: account.pubkey.toBase58(),\n mintAddress: mint.pubkey.toBase58(),\n };\n }),\n },\n\n // LAST-RESORT: tag as SPL by program id only (when decoders can't run)\n {\n when: ({ programId }) =>\n programId.equals(ASSOCIATED_TOKEN_PROGRAM_ID) ||\n programId.equals(TOKEN_PROGRAM_ID) ||\n programId.equals(TOKEN_2022_PROGRAM_ID),\n decode: () => ({}),\n },\n];\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["ASSOCIATED_TOKEN_PROGRAM_ID", "decodeBurnCheckedInstruction", "decodeBurnInstruction", "decodeCloseAccountInstruction", "decodeFreezeAccountInstruction", "decodeInitializeAccount2Instruction", "decodeInitializeAccount3Instruction", "decodeInitializeAccountInstruction", "decodeInitializeImmutableOwnerInstruction", "decodeSyncNativeInstruction", "decodeThawAccountInstruction", "decodeTransferCheckedInstruction", "decodeTransferCheckedWithFeeInstruction", "decodeTransferInstruction", "getAssociatedTokenAddressSync", "TOKEN_2022_PROGRAM_ID", "TOKEN_PROGRAM_ID", "isTokenProgramId", "pid", "safe", "fn", "DECODERS", "programId", "ixMeta", "message", "byIdx", "n", "i", "ataPk", "ownerPk", "mintPk", "afterFirstTwo", "k", "pk", "tokenProgramPk", "isV22", "instruction", "destination", "mint", "account"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
var c=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var m=(t,p,r,o)=>{for(var n=o>1?void 0:o?l(p,r):p,e=t.length-1,a;e>=0;e--)(a=t[e])&&(n=(o?a(p,r,n):a(n))||n);return o&&n&&c(p,r,n),n},s=(t,p)=>(r,o)=>p(r,o,t);import{inject as u,injectable as A}from"inversify";import{appBinderTypes as f}from"../../app-binder/di/appBinderTypes";let i=class{constructor(p){this.appBinder=p}execute(p,r,o,n){return this.appBinder.signTransaction({derivationPath:p,transaction:r,resolutionContext:o,skipOpenApp:n?.skipOpenApp??!1})}};i=m([A(),s(0,u(f.AppBinder))],i);export{i as SignTransactionUseCase};
|
|
2
2
|
//# sourceMappingURL=SignTransactionUseCase.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/use-cases/transaction/SignTransactionUseCase.ts"],
|
|
4
|
-
"sourcesContent": ["import { inject, injectable } from \"inversify\";\n\nimport { SignTransactionDAReturnType } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { Transaction } from \"@api/model/Transaction\";\nimport { appBinderTypes } from \"@internal/app-binder/di/appBinderTypes\";\nimport { SolanaAppBinder } from \"@internal/app-binder/SolanaAppBinder\";\n\n@injectable()\nexport class SignTransactionUseCase {\n constructor(\n @inject(appBinderTypes.AppBinder) private appBinder: SolanaAppBinder,\n ) {}\n\n execute(\n derivationPath: string,\n transaction: Transaction,\n options?: {\n skipOpenApp?: boolean;\n },\n ): SignTransactionDAReturnType {\n return this.appBinder.signTransaction({\n derivationPath,\n transaction,\n skipOpenApp: options?.skipOpenApp ?? false,\n });\n }\n}\n"],
|
|
5
|
-
"mappings": "iOAAA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,
|
|
6
|
-
"names": ["inject", "injectable", "appBinderTypes", "SignTransactionUseCase", "appBinder", "derivationPath", "transaction", "options", "__decorateClass", "injectable", "__decorateParam", "inject", "appBinderTypes"]
|
|
4
|
+
"sourcesContent": ["import { inject, injectable } from \"inversify\";\n\nimport { SignTransactionDAReturnType } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { Transaction } from \"@api/model/Transaction\";\nimport { TransactionResolutionContext } from \"@api/model/TransactionResolutionContext\";\nimport { appBinderTypes } from \"@internal/app-binder/di/appBinderTypes\";\nimport { SolanaAppBinder } from \"@internal/app-binder/SolanaAppBinder\";\n\n@injectable()\nexport class SignTransactionUseCase {\n constructor(\n @inject(appBinderTypes.AppBinder) private appBinder: SolanaAppBinder,\n ) {}\n\n execute(\n derivationPath: string,\n transaction: Transaction,\n resolutionContext?: TransactionResolutionContext,\n options?: {\n skipOpenApp?: boolean;\n },\n ): SignTransactionDAReturnType {\n return this.appBinder.signTransaction({\n derivationPath,\n transaction,\n resolutionContext: resolutionContext,\n skipOpenApp: options?.skipOpenApp ?? false,\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "iOAAA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YAKnC,OAAS,kBAAAC,MAAsB,yCAIxB,IAAMC,EAAN,KAA6B,CAClC,YAC4CC,EAC1C,CAD0C,eAAAA,CACzC,CAEH,QACEC,EACAC,EACAC,EACAC,EAG6B,CAC7B,OAAO,KAAK,UAAU,gBAAgB,CACpC,eAAAH,EACA,YAAAC,EACA,kBAAmBC,EACnB,YAAaC,GAAS,aAAe,EACvC,CAAC,CACH,CACF,EApBaL,EAANM,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAe,SAAS,IAFvBV",
|
|
6
|
+
"names": ["inject", "injectable", "appBinderTypes", "SignTransactionUseCase", "appBinder", "derivationPath", "transaction", "resolutionContext", "options", "__decorateClass", "injectable", "__decorateParam", "inject", "appBinderTypes"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{SignTransactionUseCase as o}from"./SignTransactionUseCase";describe("GetAppConfigurationUseCase",()=>{const e=vi.fn(),
|
|
1
|
+
import{SignTransactionUseCase as o}from"./SignTransactionUseCase";describe("GetAppConfigurationUseCase",()=>{const e=vi.fn(),i={signTransaction:e};let t;beforeEach(()=>{vi.clearAllMocks(),t=new o(i)}),it("should return the config from the appBinder's getAppConfiguration method",()=>{e.mockReturnValue(new Uint8Array([66]));const n=t.execute("44'/501'/0'/0'",new Uint8Array([1,2,3,4]));expect(e).toHaveBeenCalledWith({derivationPath:"44'/501'/0'/0'",transaction:new Uint8Array([1,2,3,4]),skipOpenApp:!1,options:void 0}),expect(n).toEqual(new Uint8Array([66]))}),it("should forward skipOpenApp and TransactionOptions to appBinder.signTransaction",()=>{const n="44'/501'/1'/2'",a=new Uint8Array([170,187]),s={skipOpenApp:!0,tokenAddress:"someToken",createATA:{address:"someAddress",mintAddress:"mint"}};t.execute(n,a,void 0,s),expect(e).toHaveBeenCalledWith({derivationPath:n,transaction:a,skipOpenApp:!0})})});
|
|
2
2
|
//# sourceMappingURL=SignTransactionUseCase.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/use-cases/transaction/SignTransactionUseCase.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { type SolanaAppBinder } from \"@internal/app-binder/SolanaAppBinder\";\n\nimport { SignTransactionUseCase } from \"./SignTransactionUseCase\";\n\ndescribe(\"GetAppConfigurationUseCase\", () => {\n const signTransactionMock = vi.fn();\n const appBinderMock = {\n signTransaction: signTransactionMock,\n } as unknown as SolanaAppBinder;\n let useCase: SignTransactionUseCase;\n\n beforeEach(() => {\n vi.clearAllMocks();\n useCase = new SignTransactionUseCase(appBinderMock);\n });\n\n it(\"should return the config from the appBinder's getAppConfiguration method\", () => {\n // GIVEN\n signTransactionMock.mockReturnValue(new Uint8Array([0x042]));\n\n // WHEN\n const result = useCase.execute(\n \"44'/501'/0'/0'\",\n new Uint8Array([0x01, 0x02, 0x03, 0x04]),\n );\n\n // THEN\n expect(signTransactionMock).toHaveBeenCalledWith({\n derivationPath: \"44'/501'/0'/0'\",\n transaction: new Uint8Array([0x01, 0x02, 0x03, 0x04]),\n skipOpenApp: false,\n options: undefined,\n });\n expect(result).toEqual(new Uint8Array([0x042]));\n });\n\n it(\"should forward skipOpenApp and TransactionOptions to appBinder.signTransaction\", () => {\n // GIVEN\n const derivationPath = \"44'/501'/1'/2'\";\n const tx = new Uint8Array([0xaa, 0xbb]);\n const opts = {\n skipOpenApp: true,\n tokenAddress: \"someToken\",\n createATA: { address: \"someAddress\", mintAddress: \"mint\" },\n };\n\n // WHEN\n useCase.execute(derivationPath, tx, opts);\n\n // THEN\n expect(signTransactionMock).toHaveBeenCalledWith({\n derivationPath,\n transaction: tx,\n skipOpenApp: true,\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "AAEA,OAAS,0BAAAA,MAA8B,2BAEvC,SAAS,6BAA8B,IAAM,CAC3C,MAAMC,EAAsB,GAAG,GAAG,EAC5BC,EAAgB,CACpB,gBAAiBD,CACnB,EACA,IAAIE,EAEJ,WAAW,IAAM,CACf,GAAG,cAAc,EACjBA,EAAU,IAAIH,EAAuBE,CAAa,CACpD,CAAC,EAED,GAAG,2EAA4E,IAAM,CAEnFD,EAAoB,gBAAgB,IAAI,WAAW,CAAC,EAAK,CAAC,CAAC,EAG3D,MAAMG,EAASD,EAAQ,QACrB,iBACA,IAAI,WAAW,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,CACzC,EAGA,OAAOF,CAAmB,EAAE,qBAAqB,CAC/C,eAAgB,iBAChB,YAAa,IAAI,WAAW,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,EACpD,YAAa,GACb,QAAS,MACX,CAAC,EACD,OAAOG,CAAM,EAAE,QAAQ,IAAI,WAAW,CAAC,EAAK,CAAC,CAAC,CAChD,CAAC,EAED,GAAG,iFAAkF,IAAM,CAEzF,MAAMC,EAAiB,iBACjBC,EAAK,IAAI,WAAW,CAAC,IAAM,GAAI,CAAC,EAChCC,EAAO,CACX,YAAa,GACb,aAAc,YACd,UAAW,CAAE,QAAS,cAAe,YAAa,MAAO,CAC3D,EAGAJ,EAAQ,QAAQE,EAAgBC,
|
|
4
|
+
"sourcesContent": ["import { type SolanaAppBinder } from \"@internal/app-binder/SolanaAppBinder\";\n\nimport { SignTransactionUseCase } from \"./SignTransactionUseCase\";\n\ndescribe(\"GetAppConfigurationUseCase\", () => {\n const signTransactionMock = vi.fn();\n const appBinderMock = {\n signTransaction: signTransactionMock,\n } as unknown as SolanaAppBinder;\n let useCase: SignTransactionUseCase;\n\n beforeEach(() => {\n vi.clearAllMocks();\n useCase = new SignTransactionUseCase(appBinderMock);\n });\n\n it(\"should return the config from the appBinder's getAppConfiguration method\", () => {\n // GIVEN\n signTransactionMock.mockReturnValue(new Uint8Array([0x042]));\n\n // WHEN\n const result = useCase.execute(\n \"44'/501'/0'/0'\",\n new Uint8Array([0x01, 0x02, 0x03, 0x04]),\n );\n\n // THEN\n expect(signTransactionMock).toHaveBeenCalledWith({\n derivationPath: \"44'/501'/0'/0'\",\n transaction: new Uint8Array([0x01, 0x02, 0x03, 0x04]),\n skipOpenApp: false,\n options: undefined,\n });\n expect(result).toEqual(new Uint8Array([0x042]));\n });\n\n it(\"should forward skipOpenApp and TransactionOptions to appBinder.signTransaction\", () => {\n // GIVEN\n const derivationPath = \"44'/501'/1'/2'\";\n const tx = new Uint8Array([0xaa, 0xbb]);\n const opts = {\n skipOpenApp: true,\n tokenAddress: \"someToken\",\n createATA: { address: \"someAddress\", mintAddress: \"mint\" },\n };\n\n // WHEN\n useCase.execute(derivationPath, tx, undefined, opts);\n\n // THEN\n expect(signTransactionMock).toHaveBeenCalledWith({\n derivationPath,\n transaction: tx,\n skipOpenApp: true,\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "AAEA,OAAS,0BAAAA,MAA8B,2BAEvC,SAAS,6BAA8B,IAAM,CAC3C,MAAMC,EAAsB,GAAG,GAAG,EAC5BC,EAAgB,CACpB,gBAAiBD,CACnB,EACA,IAAIE,EAEJ,WAAW,IAAM,CACf,GAAG,cAAc,EACjBA,EAAU,IAAIH,EAAuBE,CAAa,CACpD,CAAC,EAED,GAAG,2EAA4E,IAAM,CAEnFD,EAAoB,gBAAgB,IAAI,WAAW,CAAC,EAAK,CAAC,CAAC,EAG3D,MAAMG,EAASD,EAAQ,QACrB,iBACA,IAAI,WAAW,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,CACzC,EAGA,OAAOF,CAAmB,EAAE,qBAAqB,CAC/C,eAAgB,iBAChB,YAAa,IAAI,WAAW,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,EACpD,YAAa,GACb,QAAS,MACX,CAAC,EACD,OAAOG,CAAM,EAAE,QAAQ,IAAI,WAAW,CAAC,EAAK,CAAC,CAAC,CAChD,CAAC,EAED,GAAG,iFAAkF,IAAM,CAEzF,MAAMC,EAAiB,iBACjBC,EAAK,IAAI,WAAW,CAAC,IAAM,GAAI,CAAC,EAChCC,EAAO,CACX,YAAa,GACb,aAAc,YACd,UAAW,CAAE,QAAS,cAAe,YAAa,MAAO,CAC3D,EAGAJ,EAAQ,QAAQE,EAAgBC,EAAI,OAAWC,CAAI,EAGnD,OAAON,CAAmB,EAAE,qBAAqB,CAC/C,eAAAI,EACA,YAAaC,EACb,YAAa,EACf,CAAC,CACH,CAAC,CACH,CAAC",
|
|
6
6
|
"names": ["SignTransactionUseCase", "signTransactionMock", "appBinderMock", "useCase", "result", "derivationPath", "tx", "opts"]
|
|
7
7
|
}
|
package/lib/esm/package.json
CHANGED
|
@@ -6,8 +6,9 @@ import { type AddressOptions } from "./model/AddressOption";
|
|
|
6
6
|
import { type MessageOptions } from "./model/MessageOptions";
|
|
7
7
|
import { type Transaction } from "./model/Transaction";
|
|
8
8
|
import { type TransactionOptions } from "./model/TransactionOptions";
|
|
9
|
+
import { type TransactionResolutionContext } from "./model/TransactionResolutionContext";
|
|
9
10
|
export interface SignerSolana {
|
|
10
|
-
signTransaction: (derivationPath: string, transaction: Transaction, options?: TransactionOptions) => SignTransactionDAReturnType;
|
|
11
|
+
signTransaction: (derivationPath: string, transaction: Transaction, resolutionContext?: TransactionResolutionContext, options?: TransactionOptions) => SignTransactionDAReturnType;
|
|
11
12
|
signMessage: (derivationPath: string, message: string, options?: MessageOptions) => SignMessageDAReturnType;
|
|
12
13
|
getAddress: (derivationPath: string, options?: AddressOptions) => GetAddressDAReturnType;
|
|
13
14
|
getAppConfiguration: () => GetAppConfigurationDAReturnType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignerSolana.d.ts","sourceRoot":"","sources":["../../../src/api/SignerSolana.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAC1F,OAAO,EAAE,KAAK,+BAA+B,EAAE,MAAM,sDAAsD,CAAC;AAC5G,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,kDAAkD,CAAC;AACpG,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"SignerSolana.d.ts","sourceRoot":"","sources":["../../../src/api/SignerSolana.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAC1F,OAAO,EAAE,KAAK,+BAA+B,EAAE,MAAM,sDAAsD,CAAC;AAC5G,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,kDAAkD,CAAC;AACpG,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,yCAAyC,CAAC;AAE5F,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,CACf,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,WAAW,EACxB,iBAAiB,CAAC,EAAE,4BAA4B,EAChD,OAAO,CAAC,EAAE,kBAAkB,KACzB,2BAA2B,CAAC;IAEjC,WAAW,EAAE,CACX,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,cAAc,KACrB,uBAAuB,CAAC;IAE7B,UAAU,EAAE,CACV,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,cAAc,KACrB,sBAAsB,CAAC;IAE5B,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;CAC5D"}
|
|
@@ -4,12 +4,14 @@ import { type DeviceActionState, type ExecuteDeviceActionReturnType, type OpenAp
|
|
|
4
4
|
import { type AppConfiguration } from "../model/AppConfiguration";
|
|
5
5
|
import { type Signature } from "../model/Signature";
|
|
6
6
|
import { type Transaction } from "../model/Transaction";
|
|
7
|
+
import { type TransactionResolutionContext } from "../model/TransactionResolutionContext";
|
|
7
8
|
import { type SolanaAppErrorCodes } from "../../internal/app-binder/command/utils/SolanaApplicationErrors";
|
|
8
|
-
import { type TxInspectorResult } from "../../internal/app-binder/services/
|
|
9
|
+
import { type TxInspectorResult } from "../../internal/app-binder/services/utils/transactionDecoders";
|
|
9
10
|
export type SignTransactionDAOutput = Signature;
|
|
10
11
|
export type SignTransactionDAInput = {
|
|
11
12
|
readonly derivationPath: string;
|
|
12
13
|
readonly transaction: Transaction;
|
|
14
|
+
readonly resolutionContext?: TransactionResolutionContext;
|
|
13
15
|
readonly skipOpenApp: boolean;
|
|
14
16
|
readonly contextModule: ContextModule;
|
|
15
17
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignTransactionDeviceActionTypes.d.ts","sourceRoot":"","sources":["../../../../src/api/app-binder/SignTransactionDeviceActionTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,KAAK,qCAAqC,EAAE,MAAM,kEAAkE,CAAC;AAC9H,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,6BAA6B,EAClC,KAAK,cAAc,EACnB,KAAK,4BAA4B,EACjC,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC7B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,4DAA4D,CAAC;AACtG,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"SignTransactionDeviceActionTypes.d.ts","sourceRoot":"","sources":["../../../../src/api/app-binder/SignTransactionDeviceActionTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,KAAK,qCAAqC,EAAE,MAAM,kEAAkE,CAAC;AAC9H,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,6BAA6B,EAClC,KAAK,cAAc,EACnB,KAAK,4BAA4B,EACjC,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC7B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,yCAAyC,CAAC;AAC5F,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,4DAA4D,CAAC;AACtG,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,yDAAyD,CAAC;AAEjG,MAAM,MAAM,uBAAuB,GAAG,SAAS,CAAC;AAEhD,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,4BAA4B,CAAC;IAC1D,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAC9B,cAAc,GACd,uBAAuB,CAAC,mBAAmB,CAAC,CAAC;AAEjD,KAAK,oCAAoC,GACrC,uBAAuB,GACvB,4BAA4B,CAAC;AAEjC,MAAM,MAAM,kCAAkC,GAAG;IAC/C,uBAAuB,EAAE,oCAAoC,CAAC;CAC/D,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,iBAAiB,CACpD,uBAAuB,EACvB,sBAAsB,EACtB,kCAAkC,CACnC,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,QAAQ,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC9C,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC5C,QAAQ,CAAC,wBAAwB,EAAE,qCAAqC,GAAG,IAAI,CAAC;IAChF,QAAQ,CAAC,eAAe,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,6BAA6B,CACrE,uBAAuB,EACvB,sBAAsB,EACtB,kCAAkC,CACnC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransactionResolutionContext.d.ts","sourceRoot":"","sources":["../../../../src/api/model/TransactionResolutionContext.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,4BAA4B,GAAG;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE;QACV,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH,CAAC"}
|