@ledgerhq/device-signer-kit-solana 0.0.0-safe-20250917153142 → 0.0.0-transaction-unfunded-20250917151052
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/SolanaTools.js +1 -1
- package/lib/cjs/api/SolanaTools.js.map +1 -1
- package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +1 -1
- package/lib/cjs/api/index.js +1 -1
- package/lib/cjs/api/index.js.map +2 -2
- package/lib/cjs/api/model/TransactionOptions.js +1 -1
- package/lib/cjs/api/model/TransactionOptions.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/SolanaAppBinder.test.js +1 -1
- package/lib/cjs/internal/app-binder/SolanaAppBinder.test.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/device-action/SignTransactionDeviceAction.test.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/services/TransactionInspector.js +1 -1
- package/lib/cjs/internal/app-binder/services/TransactionInspector.js.map +3 -3
- package/lib/cjs/internal/app-binder/services/TransactionInspector.test.js +1 -1
- package/lib/cjs/internal/app-binder/services/TransactionInspector.test.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/app-binder/task/BuildTransactionContextTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js.map +1 -1
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js.map +2 -2
- 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/esm/api/index.js +1 -1
- package/lib/esm/api/index.js.map +2 -2
- 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/SolanaAppBinder.test.js +1 -1
- package/lib/esm/internal/app-binder/SolanaAppBinder.test.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/device-action/SignTransactionDeviceAction.test.js +1 -1
- package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.test.js.map +2 -2
- package/lib/esm/internal/app-binder/services/TransactionInspector.js +1 -1
- package/lib/esm/internal/app-binder/services/TransactionInspector.js.map +3 -3
- package/lib/esm/internal/app-binder/services/TransactionInspector.test.js +1 -1
- package/lib/esm/internal/app-binder/services/TransactionInspector.test.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/app-binder/task/BuildTransactionContextTask.js +1 -1
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js.map +1 -1
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js.map +2 -2
- 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/types/api/SignerSolana.d.ts +2 -2
- package/lib/types/api/SignerSolana.d.ts.map +1 -1
- package/lib/types/api/SolanaTools.d.ts +1 -2
- package/lib/types/api/SolanaTools.d.ts.map +1 -1
- package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +2 -1
- package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -1
- package/lib/types/api/index.d.ts +0 -1
- package/lib/types/api/index.d.ts.map +1 -1
- package/lib/types/api/model/TransactionOptions.d.ts +5 -6
- package/lib/types/api/model/TransactionOptions.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 -1
- package/lib/types/internal/app-binder/SolanaAppBinder.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/SignTransactionDeviceAction.d.ts +3 -0
- 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 -8
- package/lib/types/internal/app-binder/services/TransactionInspector.d.ts.map +1 -1
- package/lib/types/internal/app-binder/services/utils/transactionDecoders.d.ts +23 -0
- package/lib/types/internal/app-binder/services/utils/transactionDecoders.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts +2 -2
- package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts.map +1 -1
- package/lib/types/internal/use-cases/transaction/SignTransactionUseCase.d.ts +2 -3
- package/lib/types/internal/use-cases/transaction/SignTransactionUseCase.d.ts.map +1 -1
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +5 -5
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var i=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var
|
|
1
|
+
"use strict";var i=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var g=(n,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of a(t))!p.call(n,e)&&e!==o&&i(n,e,{get:()=>t[e],enumerable:!(r=s(t,e))||r.enumerable});return n};var m=n=>g(i({},"__esModule",{value:!0}),n);var y={};module.exports=m(y);
|
|
2
2
|
//# sourceMappingURL=SignerSolana.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/api/SignerSolana.ts"],
|
|
4
|
-
"sourcesContent": ["import { 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
|
|
4
|
+
"sourcesContent": ["import { 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 SolanaTransactionOptions } from \"@api/model/TransactionOptions\";\n\nexport interface SignerSolana {\n signTransaction: (\n derivationPath: string,\n transaction: Transaction,\n solanaTransactionOptions?: SolanaTransactionOptions,\n ) => SignTransactionDAReturnType;\n\n signMessage: (\n derivationPath: string,\n message: string,\n options?: MessageOptions,\n ) => SignMessageDAReturnType;\n\n getAddress: (\n derivationPath: string,\n options?: AddressOptions,\n ) => GetAddressDAReturnType;\n\n getAppConfiguration: () => GetAppConfigurationDAReturnType;\n}\n"],
|
|
5
5
|
"mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
|
|
6
6
|
"names": ["SignerSolana_exports", "__toCommonJS"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var o=Object.defineProperty;var
|
|
1
|
+
"use strict";var o=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var A=(t,e,p,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of a(e))!s.call(t,r)&&r!==p&&o(t,r,{get:()=>e[r],enumerable:!(n=i(e,r))||n.enumerable});return t};var d=t=>A(o({},"__esModule",{value:!0}),t);var y={};module.exports=d(y);
|
|
2
2
|
//# sourceMappingURL=SolanaTools.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/api/SolanaTools.ts"],
|
|
4
|
-
"sourcesContent": ["import { type GenerateTransactionDAReturnType } from \"@api/app-binder/GenerateTransactionDeviceActionTypes\";\nimport { type GetAddressDAReturnType } from \"@api/app-binder/GetAddressDeviceActionTypes\";\nimport { type GetAppConfigurationDAReturnType } from \"@api/app-binder/GetAppConfigurationDeviceActionTypes\";\nimport { type AddressOptions } from \"@api/model/AddressOption\";\
|
|
4
|
+
"sourcesContent": ["import { type GenerateTransactionDAReturnType } from \"@api/app-binder/GenerateTransactionDeviceActionTypes\";\nimport { type GetAddressDAReturnType } from \"@api/app-binder/GetAddressDeviceActionTypes\";\nimport { type GetAppConfigurationDAReturnType } from \"@api/app-binder/GetAppConfigurationDeviceActionTypes\";\nimport { type AddressOptions } from \"@api/model/AddressOption\";\n\nexport interface SolanaTools {\n generateTransaction: (\n derivationPath: string,\n ) => GenerateTransactionDAReturnType;\n\n getAddress: (\n derivationPath: string,\n options?: AddressOptions,\n ) => GetAddressDAReturnType;\n\n getAppConfiguration: () => GetAppConfigurationDAReturnType;\n}\n"],
|
|
5
5
|
"mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
|
|
6
6
|
"names": ["SolanaTools_exports", "__toCommonJS"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/api/app-binder/SignTransactionDeviceActionTypes.ts"],
|
|
4
|
-
"sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport { type SolanaTransactionContextResultSuccess } from \"@ledgerhq/context-module/src/solana/domain/solanaContextTypes.js\";\nimport {\n type DeviceActionState,\n type ExecuteDeviceActionReturnType,\n type OpenAppDAError,\n type OpenAppDARequiredInteraction,\n type SendCommandInAppDAError,\n type UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\nimport { type Signature } from \"@api/model/Signature\";\nimport { type Transaction } from \"@api/model/Transaction\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport { type TxInspectorResult } from \"@internal/app-binder/services/TransactionInspector\";\n\nexport type SignTransactionDAOutput = Signature;\n\nexport type SignTransactionDAInput = {\n readonly derivationPath: string;\n readonly transaction: Transaction;\n readonly
|
|
4
|
+
"sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport { type SolanaTransactionContextResultSuccess } from \"@ledgerhq/context-module/src/solana/domain/solanaContextTypes.js\";\nimport {\n type DeviceActionState,\n type ExecuteDeviceActionReturnType,\n type OpenAppDAError,\n type OpenAppDARequiredInteraction,\n type SendCommandInAppDAError,\n type UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\nimport { type Signature } from \"@api/model/Signature\";\nimport { type Transaction } from \"@api/model/Transaction\";\nimport { type SolanaTransactionOptions } from \"@api/model/TransactionOptions\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport { type TxInspectorResult } from \"@internal/app-binder/services/TransactionInspector\";\n\nexport type SignTransactionDAOutput = Signature;\n\nexport type SignTransactionDAInput = {\n readonly derivationPath: string;\n readonly transaction: Transaction;\n readonly transactionOptions?: SolanaTransactionOptions;\n readonly contextModule: ContextModule;\n};\n\nexport type SignTransactionDAError =\n | OpenAppDAError\n | SendCommandInAppDAError<SolanaAppErrorCodes>;\n\ntype SignTransactionDARequiredInteraction =\n | UserInteractionRequired\n | OpenAppDARequiredInteraction;\n\nexport type SignTransactionDAIntermediateValue = {\n requiredUserInteraction: SignTransactionDARequiredInteraction;\n};\n\nexport type SignTransactionDAState = DeviceActionState<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n>;\n\nexport type SignTransactionDAInternalState = {\n readonly error: SignTransactionDAError | null;\n readonly signature: Signature | null;\n readonly appConfig: AppConfiguration | null;\n readonly solanaTransactionContext: SolanaTransactionContextResultSuccess | null;\n readonly inspectorResult: TxInspectorResult | null;\n};\n\nexport type SignTransactionDAReturnType = ExecuteDeviceActionReturnType<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n>;\n"],
|
|
5
5
|
"mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
|
|
6
6
|
"names": ["SignTransactionDeviceActionTypes_exports", "__toCommonJS"]
|
|
7
7
|
}
|
package/lib/cjs/api/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var n=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var d=(r,e)=>{for(var a in e)n(r,a,{get:e[a],enumerable:!0})},D=(r,e,a,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of A(e))!u.call(r,t)&&t!==a&&n(r,t,{get:()=>e[t],enumerable:!(o=s(e,t))||o.enumerable});return r};var T=r=>D(n({},"__esModule",{value:!0}),r);var c={};d(c,{SignerSolanaBuilder:()=>i.SignerSolanaBuilder,SolanaToolsBuilder:()=>p.SolanaToolsBuilder});module.exports=T(c);var i=require("./SignerSolanaBuilder"),p=require("./SolanaToolsBuilder");0&&(module.exports={SignerSolanaBuilder,SolanaToolsBuilder});
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/lib/cjs/api/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/api/index.ts"],
|
|
4
|
-
"sourcesContent": ["export type {\n GenerateTransactionDAError,\n GenerateTransactionDAIntermediateValue,\n GenerateTransactionDAOutput,\n GenerateTransactionDAReturnType,\n} from \"@api/app-binder/GenerateTransactionDeviceActionTypes\";\nexport type {\n GetAddressDAError,\n GetAddressDAIntermediateValue,\n GetAddressDAOutput,\n GetAddressDAReturnType,\n} from \"@api/app-binder/GetAddressDeviceActionTypes\";\nexport type {\n GetAppConfigurationDAError,\n GetAppConfigurationDAIntermediateValue,\n GetAppConfigurationDAOutput,\n} from \"@api/app-binder/GetAppConfigurationDeviceActionTypes\";\nexport type {\n SignMessageDAError,\n SignMessageDAIntermediateValue,\n SignMessageDAOutput,\n} from \"@api/app-binder/SignMessageDeviceActionTypes\";\nexport type {\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAOutput,\n SignTransactionDAReturnType,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nexport type { Signature } from \"@api/model/Signature\";\nexport type { Transaction } from \"@api/model/Transaction\";\nexport type {
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4GAAAE,EAAAF,
|
|
4
|
+
"sourcesContent": ["export type {\n GenerateTransactionDAError,\n GenerateTransactionDAIntermediateValue,\n GenerateTransactionDAOutput,\n GenerateTransactionDAReturnType,\n} from \"@api/app-binder/GenerateTransactionDeviceActionTypes\";\nexport type {\n GetAddressDAError,\n GetAddressDAIntermediateValue,\n GetAddressDAOutput,\n GetAddressDAReturnType,\n} from \"@api/app-binder/GetAddressDeviceActionTypes\";\nexport type {\n GetAppConfigurationDAError,\n GetAppConfigurationDAIntermediateValue,\n GetAppConfigurationDAOutput,\n} from \"@api/app-binder/GetAppConfigurationDeviceActionTypes\";\nexport type {\n SignMessageDAError,\n SignMessageDAIntermediateValue,\n SignMessageDAOutput,\n} from \"@api/app-binder/SignMessageDeviceActionTypes\";\nexport type {\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAOutput,\n SignTransactionDAReturnType,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nexport type { Signature } from \"@api/model/Signature\";\nexport type { Transaction } from \"@api/model/Transaction\";\nexport type { SignerSolana } from \"@api/SignerSolana\";\nexport { SignerSolanaBuilder } from \"@api/SignerSolanaBuilder\";\nexport type { SolanaTools } from \"@api/SolanaTools\";\nexport { SolanaToolsBuilder } from \"@api/SolanaToolsBuilder\";\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4GAAAE,EAAAF,GA+BA,IAAAG,EAAoC,oCAEpCC,EAAmC",
|
|
6
6
|
"names": ["api_exports", "__export", "__toCommonJS", "import_SignerSolanaBuilder", "import_SolanaToolsBuilder"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var e=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var r=Object.prototype.hasOwnProperty;var l=(n,o,i,a)=>{if(o&&typeof o=="object"||typeof o=="function")for(let t of p(o))!r.call(n,t)&&t!==i&&e(n,t,{get:()=>o[t],enumerable:!(a=s(o,t))||a.enumerable});return n};var R=n=>l(e({},"__esModule",{value:!0}),n);var c={};module.exports=R(c);
|
|
2
2
|
//# sourceMappingURL=TransactionOptions.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/api/model/TransactionOptions.ts"],
|
|
4
|
-
"sourcesContent": ["
|
|
4
|
+
"sourcesContent": ["import { type TransactionResolutionContext } from \"./TransactionResolutionContext\";\n\nexport type SolanaTransactionOptions = {\n transactionResolutionContext?: TransactionResolutionContext;\n solanaRPCURL?: string;\n skipOpenApp?: boolean;\n};\n"],
|
|
5
5
|
"mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
|
|
6
6
|
"names": ["TransactionOptions_exports", "__toCommonJS"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var r=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var o=Object.getOwnPropertyNames;var a=Object.prototype.hasOwnProperty;var A=(s,t,d,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of o(t))!a.call(s,e)&&e!==d&&r(s,e,{get:()=>t[e],enumerable:!(n=i(t,e))||n.enumerable});return s};var g=s=>A(r({},"__esModule",{value:!0}),s);var c={};module.exports=g(c);
|
|
2
|
+
//# sourceMappingURL=TransactionResolutionContext.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/api/model/TransactionResolutionContext.ts"],
|
|
4
|
+
"sourcesContent": ["export type TransactionResolutionContext = {\n tokenAddress?: string;\n createATA?: {\n address: string;\n mintAddress: string;\n };\n};\n"],
|
|
5
|
+
"mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
|
|
6
|
+
"names": ["TransactionResolutionContext_exports", "__toCommonJS"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var i=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var u=(n,e)=>{for(var t in e)i(n,t,{get:e[t],enumerable:!0})},c=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of g(e))!m.call(n,s)&&s!==t&&i(n,s,{get:()=>e[s],enumerable:!(r=p(e,s))||r.enumerable});return n};var f=n=>c(i({},"__esModule",{value:!0}),n);var C={};u(C,{DefaultSignerSolana:()=>y});module.exports=f(C);var o=require("./use-cases/di/useCasesTypes"),a=require("./di");class y{_container;constructor({dmk:e,sessionId:t,contextModule:r}){this._container=(0,a.makeContainer)({dmk:e,sessionId:t,contextModule:r})}signTransaction(e,t){return this._container.get(o.useCasesTypes.SignTransactionUseCase).execute(e,t)}signMessage(e,t,r){return this._container.get(o.useCasesTypes.SignMessageUseCase).execute(e,t,r)}getAddress(e,t){return this._container.get(o.useCasesTypes.GetAddressUseCase).execute(e,t)}getAppConfiguration(){return this._container.get(o.useCasesTypes.GetAppConfigurationUseCase).execute()}}0&&(module.exports={DefaultSignerSolana});
|
|
1
|
+
"use strict";var i=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var u=(n,e)=>{for(var t in e)i(n,t,{get:e[t],enumerable:!0})},c=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of g(e))!m.call(n,s)&&s!==t&&i(n,s,{get:()=>e[s],enumerable:!(r=p(e,s))||r.enumerable});return n};var f=n=>c(i({},"__esModule",{value:!0}),n);var C={};u(C,{DefaultSignerSolana:()=>y});module.exports=f(C);var o=require("./use-cases/di/useCasesTypes"),a=require("./di");class y{_container;constructor({dmk:e,sessionId:t,contextModule:r}){this._container=(0,a.makeContainer)({dmk:e,sessionId:t,contextModule:r})}signTransaction(e,t,r){return this._container.get(o.useCasesTypes.SignTransactionUseCase).execute(e,t,r)}signMessage(e,t,r){return this._container.get(o.useCasesTypes.SignMessageUseCase).execute(e,t,r)}getAddress(e,t){return this._container.get(o.useCasesTypes.GetAddressUseCase).execute(e,t)}getAppConfiguration(){return this._container.get(o.useCasesTypes.GetAppConfigurationUseCase).execute()}}0&&(module.exports={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": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,yBAAAE,IAAA,eAAAC,EAAAH,
|
|
6
|
-
"names": ["DefaultSignerSolana_exports", "__export", "DefaultSignerSolana", "__toCommonJS", "import_useCasesTypes", "import_di", "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 SolanaTransactionOptions } from \"@api/model/TransactionOptions\";\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 solanaTransactionOptions?: SolanaTransactionOptions,\n ): SignTransactionDAReturnType {\n return this._container\n .get<SignTransactionUseCase>(useCasesTypes.SignTransactionUseCase)\n .execute(derivationPath, transaction, solanaTransactionOptions);\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": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,yBAAAE,IAAA,eAAAC,EAAAH,GAmBA,IAAAI,EAA8B,wCAG9BC,EAA8B,gBAQvB,MAAMH,CAA4C,CAC/C,WAER,YAAY,CACV,IAAAI,EACA,UAAAC,EACA,cAAAC,CACF,EAAuC,CACrC,KAAK,cAAa,iBAAc,CAAE,IAAAF,EAAK,UAAAC,EAAW,cAAAC,CAAc,CAAC,CACnE,CAEA,gBACEC,EACAC,EACAC,EAC6B,CAC7B,OAAO,KAAK,WACT,IAA4B,gBAAc,sBAAsB,EAChE,QAAQF,EAAgBC,EAAaC,CAAwB,CAClE,CAEA,YACEF,EACAG,EACAC,EACyB,CACzB,OAAO,KAAK,WACT,IAAwB,gBAAc,kBAAkB,EACxD,QAAQJ,EAAgBG,EAASC,CAAO,CAC7C,CAEA,WACEJ,EACAI,EACwB,CACxB,OAAO,KAAK,WACT,IAAuB,gBAAc,iBAAiB,EACtD,QAAQJ,EAAgBI,CAAO,CACpC,CAEA,qBAAuD,CACrD,OAAO,KAAK,WACT,IAAgC,gBAAc,0BAA0B,EACxE,QAAQ,CACb,CACF",
|
|
6
|
+
"names": ["DefaultSignerSolana_exports", "__export", "DefaultSignerSolana", "__toCommonJS", "import_useCasesTypes", "import_di", "dmk", "sessionId", "contextModule", "derivationPath", "transaction", "solanaTransactionOptions", "message", "options"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var p=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var k=Object.prototype.hasOwnProperty;var I=(n,e)=>{for(var t in e)p(n,t,{get:e[t],enumerable:!0})},O=(n,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of f(e))!k.call(n,i)&&i!==t&&p(n,i,{get:()=>e[i],enumerable:!(o=A(e,i))||o.enumerable});return n};var x=n=>O(p({},"__esModule",{value:!0}),n),v=(n,e,t,o)=>{for(var i=o>1?void 0:o?A(e,t):e,m=n.length-1,u;m>=0;m--)(u=n[m])&&(i=(o?u(e,t,i):u(i))||i);return o&&i&&p(e,t,i),i},c=(n,e)=>(t,o)=>e(t,o,n);var y={};I(y,{SolanaAppBinder:()=>a});module.exports=x(y);var s=require("@ledgerhq/device-management-kit"),r=require("inversify"),T=require("../app-binder/task/SendSignMessageTask"),d=require("../externalTypes"),D=require("./command/GetAppConfigurationCommand"),g=require("./command/GetPubKeyCommand"),h=require("./device-action/GenerateTransactionDeviceAction"),l=require("./device-action/SignTransactionDeviceAction");let a=class{constructor(e,t,o){this.dmk=e;this.sessionId=t;this.contextModule=o}getAddress(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new s.SendCommandInAppDeviceAction({input:{command:new g.GetPubKeyCommand(e),appName:"Solana",requiredUserInteraction:e.checkOnDevice?s.UserInteractionRequired.VerifyAddress:s.UserInteractionRequired.None,skipOpenApp:e.skipOpenApp}})})}signTransaction(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new l.SignTransactionDeviceAction({input:{derivationPath:e.derivationPath,transaction:e.transaction,transactionOptions:e.solanaTransactionOptions,contextModule:this.contextModule}})})}generateTransaction(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new h.GenerateTransactionDeviceAction({input:{derivationPath:e.derivationPath,skipOpenApp:e.skipOpenApp,contextModule:this.contextModule}})})}signMessage(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new s.CallTaskInAppDeviceAction({input:{task:async t=>new T.SendSignMessageTask(t,{derivationPath:e.derivationPath,sendingData:new TextEncoder().encode(e.message)}).run(),appName:"Solana",requiredUserInteraction:s.UserInteractionRequired.SignPersonalMessage,skipOpenApp:e.skipOpenApp}})})}getAppConfiguration(){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new s.SendCommandInAppDeviceAction({input:{command:new D.GetAppConfigurationCommand,appName:"Solana",requiredUserInteraction:s.UserInteractionRequired.None,skipOpenApp:!1}})})}};a=v([(0,r.injectable)(),c(0,(0,r.inject)(d.externalTypes.Dmk)),c(1,(0,r.inject)(d.externalTypes.SessionId)),c(2,(0,r.inject)(d.externalTypes.ContextModule))],a);0&&(module.exports={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
|
|
5
|
-
"mappings": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qBAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAMO,2CACPC,EAAmC,
|
|
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 { SolanaTransactionOptions } from \"@api/model/TransactionOptions\";\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 solanaTransactionOptions?: SolanaTransactionOptions;\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 transactionOptions: args.solanaTransactionOptions,\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": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qBAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAMO,2CACPC,EAAmC,qBASnCC,EAAoC,yDACpCC,EAA8B,mCAE9BC,EAA2C,gDAC3CC,EAAiC,sCACjCC,EAAgD,2DAChDC,EAA4C,uDAGrC,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,IAAI,+BAA6B,CAC7C,MAAO,CACL,QAAS,IAAI,mBAAiBA,CAAI,EAClC,QAAS,SACT,wBAAyBA,EAAK,cAC1B,0BAAwB,cACxB,0BAAwB,KAC5B,YAAaA,EAAK,WACpB,CACF,CAAC,CACH,CAAC,CACH,CAEA,gBAAgBA,EAIgB,CAC9B,OAAO,KAAK,IAAI,oBAAoB,CAClC,UAAW,KAAK,UAChB,aAAc,IAAI,8BAA4B,CAC5C,MAAO,CACL,eAAgBA,EAAK,eACrB,YAAaA,EAAK,YAClB,mBAAoBA,EAAK,yBACzB,cAAe,KAAK,aACtB,CACF,CAAC,CACH,CAAC,CACH,CAEA,oBAAoBA,EAGgB,CAClC,OAAO,KAAK,IAAI,oBAAoB,CAClC,UAAW,KAAK,UAChB,aAAc,IAAI,kCAAgC,CAChD,MAAO,CACL,eAAgBA,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,IAAI,4BAA0B,CAC1C,MAAO,CACL,KAAM,MAAOC,GACX,IAAI,sBAAoBA,EAAa,CACnC,eAAgBD,EAAK,eACrB,YAAa,IAAI,YAAY,EAAE,OAAOA,EAAK,OAAO,CACpD,CAAC,EAAE,IAAI,EACT,QAAS,SACT,wBAAyB,0BAAwB,oBACjD,YAAaA,EAAK,WACpB,CACF,CAAC,CACH,CAAC,CACH,CAEA,qBAAuD,CACrD,OAAO,KAAK,IAAI,oBAAoB,CAClC,UAAW,KAAK,UAChB,aAAc,IAAI,+BAA6B,CAC7C,MAAO,CACL,QAAS,IAAI,6BACb,QAAS,SACT,wBAAyB,0BAAwB,KACjD,YAAa,EACf,CACF,CAAC,CACH,CAAC,CACH,CACF,EAhGaJ,EAANM,EAAA,IADN,cAAW,EAGPC,EAAA,eAAO,gBAAc,GAAG,GACxBA,EAAA,eAAO,gBAAc,SAAS,GAC9BA,EAAA,eAAO,gBAAc,aAAa,IAJ1BP",
|
|
6
6
|
"names": ["SolanaAppBinder_exports", "__export", "SolanaAppBinder", "__toCommonJS", "import_device_management_kit", "import_inversify", "import_SendSignMessageTask", "import_externalTypes", "import_GetAppConfigurationCommand", "import_GetPubKeyCommand", "import_GenerateTransactionDeviceAction", "import_SignTransactionDeviceAction", "SolanaAppBinder", "dmk", "sessionId", "contextModule", "args", "internalApi", "__decorateClass", "__decorateParam"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var o=require("@ledgerhq/device-management-kit"),u=require("rxjs"),m=require("./command/GetAppConfigurationCommand"),l=require("./command/GetPubKeyCommand"),v=require("./device-action/GenerateTransactionDeviceAction"),D=require("./device-action/SignTransactionDeviceAction"),p=require("./SolanaAppBinder");describe("SolanaAppBinder",()=>{const
|
|
1
|
+
"use strict";var o=require("@ledgerhq/device-management-kit"),u=require("rxjs"),m=require("./command/GetAppConfigurationCommand"),l=require("./command/GetPubKeyCommand"),v=require("./device-action/GenerateTransactionDeviceAction"),D=require("./device-action/SignTransactionDeviceAction"),p=require("./SolanaAppBinder");describe("SolanaAppBinder",()=>{const a={},i={sendCommand:vi.fn(),executeDeviceAction:vi.fn()};beforeEach(()=>{vi.clearAllMocks()}),it("should be defined",()=>{const n=new p.SolanaAppBinder({},{},a);expect(n).toBeDefined()}),describe("getAddress",()=>{it("should return the address",()=>new Promise((n,s)=>{const t="D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5";vi.spyOn(i,"executeDeviceAction").mockReturnValue({observable:(0,u.from)([{status:o.DeviceActionStatus.Completed,output:t}]),cancel:vi.fn()});const c=new p.SolanaAppBinder(i,"sessionId",a),{observable:d}=c.getAddress({derivationPath:"44'/501'",checkOnDevice:!1,skipOpenApp:!1}),r=[];d.subscribe({next:e=>{r.push(e)},error:e=>{s(e)},complete:()=>{try{expect(r).toEqual([{status:o.DeviceActionStatus.Completed,output:t}]),n()}catch(e){s(e)}}})})),describe("calls of executeDeviceAction with the correct params",()=>{const n={derivationPath:"44'/60'/3'/2/1",returnChainCode:!1,skipOpenApp:!1};it("when checkOnDevice is true: UserInteractionRequired.VerifyAddress",()=>{const t={...n,checkOnDevice:!0};new p.SolanaAppBinder(i,"sessionId",a).getAddress(t),expect(i.executeDeviceAction).toHaveBeenCalledWith({sessionId:"sessionId",deviceAction:new o.SendCommandInAppDeviceAction({input:{command:new l.GetPubKeyCommand(t),appName:"Solana",requiredUserInteraction:o.UserInteractionRequired.VerifyAddress,skipOpenApp:!1}})})}),it("when checkOnDevice is false: UserInteractionRequired.None",()=>{const t={...n,checkOnDevice:!1};new p.SolanaAppBinder(i,"sessionId",a).getAddress(t),expect(i.executeDeviceAction).toHaveBeenCalledWith({sessionId:"sessionId",deviceAction:new o.SendCommandInAppDeviceAction({input:{command:new l.GetPubKeyCommand(t),appName:"Solana",requiredUserInteraction:o.UserInteractionRequired.None,skipOpenApp:!1}})})})})}),describe("signTransaction",()=>{it("should return the signature",()=>new Promise((n,s)=>{const t=new Uint8Array([1,2,3]);vi.spyOn(i,"executeDeviceAction").mockReturnValue({observable:(0,u.from)([{status:o.DeviceActionStatus.Completed,output:t}]),cancel:vi.fn()});const c=new p.SolanaAppBinder(i,"sessionId",a),{observable:d}=c.signTransaction({derivationPath:"44'/501'",transaction:new Uint8Array([1,2,3,4]),solanaTransactionOptions:{skipOpenApp:!1}}),r=[];d.subscribe({next:e=>{r.push(e)},error:e=>{s(e)},complete:()=>{try{expect(r).toEqual([{status:o.DeviceActionStatus.Completed,output:t}]),n()}catch(e){s(e)}}})})),it("should call executeDeviceAction with the correct params",()=>{const n="44'/60'/3'/2/1",s=new Uint8Array([1,2,3,4]),t=!1;new p.SolanaAppBinder(i,"sessionId",a).signTransaction({derivationPath:n,transaction:s,solanaTransactionOptions:{skipOpenApp:!1}}),expect(i.executeDeviceAction).toHaveBeenCalledWith({sessionId:"sessionId",deviceAction:new D.SignTransactionDeviceAction({input:{derivationPath:n,transaction:s,transactionOptions:{skipOpenApp:t},contextModule:a}})})})}),describe("signMessage",()=>{it("should return the signed message",()=>new Promise((n,s)=>{const t=new Uint8Array([28,138,84,5,16]),c={derivationPath:"44'/501'/0'/0'",message:"Hello world",skipOpenApp:!1};vi.spyOn(i,"executeDeviceAction").mockReturnValue({observable:(0,u.from)([{status:o.DeviceActionStatus.Completed,output:t}]),cancel:vi.fn()});const d=new p.SolanaAppBinder(i,"sessionId",a),{observable:r}=d.signMessage(c),e=[];r.subscribe({next:A=>{e.push(A)},error:A=>{s(A)},complete:()=>{try{expect(e).toEqual([{status:o.DeviceActionStatus.Completed,output:t}]),n()}catch(A){s(A)}}})}))}),describe("getAppConfiguration",()=>{it("should return the app configuration",()=>new Promise((n,s)=>{const t={blindSigningEnabled:!0,pubKeyDisplayMode:"LONG",version:"2.5.10"};vi.spyOn(i,"executeDeviceAction").mockReturnValue({observable:(0,u.from)([{status:o.DeviceActionStatus.Completed,output:t}]),cancel:vi.fn()});const c=new p.SolanaAppBinder(i,"sessionId",a),{observable:d}=c.getAppConfiguration(),r=[];d.subscribe({next:e=>{r.push(e)},error:e=>{s(e)},complete:()=>{try{expect(r).toEqual([{status:o.DeviceActionStatus.Completed,output:t}]),n()}catch(e){s(e)}}})})),it("should call executeDeviceAction with the correct params",()=>{new p.SolanaAppBinder(i,"sessionId",a).getAppConfiguration(),expect(i.executeDeviceAction).toHaveBeenCalledWith({sessionId:"sessionId",deviceAction:new o.SendCommandInAppDeviceAction({input:{command:new m.GetAppConfigurationCommand,appName:"Solana",requiredUserInteraction:o.UserInteractionRequired.None,skipOpenApp:!1}})})})}),describe("generateTransaction",()=>{it("should return the serialized transaction",()=>new Promise((n,s)=>{const t="BASE64_OR_HEX_TX";vi.spyOn(i,"executeDeviceAction").mockReturnValue({observable:(0,u.from)([{status:o.DeviceActionStatus.Completed,output:t}]),cancel:vi.fn()});const c=new p.SolanaAppBinder(i,"sessionId",a),{observable:d}=c.generateTransaction({derivationPath:"44'/501'/0'/0'",skipOpenApp:!1}),r=[];d.subscribe({next:e=>r.push(e),error:e=>s(e),complete:()=>{try{expect(r).toEqual([{status:o.DeviceActionStatus.Completed,output:t}]),n()}catch(e){s(e)}}})})),it("should call executeDeviceAction with the correct params",()=>{const n="44'/501'/0'/0'";new p.SolanaAppBinder(i,"sessionId",a).generateTransaction({derivationPath:n,skipOpenApp:!0}),expect(i.executeDeviceAction).toHaveBeenCalledWith({sessionId:"sessionId",deviceAction:new v.GenerateTransactionDeviceAction({input:{derivationPath:n,skipOpenApp:!0,contextModule:a}})})})})});
|
|
2
2
|
//# sourceMappingURL=SolanaAppBinder.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/internal/app-binder/SolanaAppBinder.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n type DeviceActionIntermediateValue,\n type DeviceActionState,\n DeviceActionStatus,\n type DeviceManagementKit,\n type DeviceSessionId,\n type DmkError,\n SendCommandInAppDeviceAction,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { from } from \"rxjs\";\n\nimport {\n type GenerateTransactionDAError,\n type GenerateTransactionDAIntermediateValue,\n type GenerateTransactionDAOutput,\n} from \"@api/app-binder/GenerateTransactionDeviceActionTypes\";\nimport {\n type GetAppConfigurationDAError,\n type GetAppConfigurationDAIntermediateValue,\n type GetAppConfigurationDAOutput,\n} from \"@api/app-binder/GetAppConfigurationDeviceActionTypes\";\nimport {\n type GetAddressDAError,\n type GetAddressDAIntermediateValue,\n type GetAddressDAOutput,\n type SignTransactionDAError,\n type SignTransactionDAIntermediateValue,\n type SignTransactionDAOutput,\n} from \"@api/index\";\n\nimport { GetAppConfigurationCommand } from \"./command/GetAppConfigurationCommand\";\nimport { GetPubKeyCommand } from \"./command/GetPubKeyCommand\";\nimport { GenerateTransactionDeviceAction } from \"./device-action/GenerateTransactionDeviceAction\";\nimport { SignTransactionDeviceAction } from \"./device-action/SignTransactionDeviceAction\";\nimport { SolanaAppBinder } from \"./SolanaAppBinder\";\n\ndescribe(\"SolanaAppBinder\", () => {\n // stub ContextModule for tests\n const contextModuleStub: ContextModule = {} as ContextModule;\n\n const mockedDmk: DeviceManagementKit = {\n sendCommand: vi.fn(),\n executeDeviceAction: vi.fn(),\n } as unknown as DeviceManagementKit;\n\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n it(\"should be defined\", () => {\n const binder = new SolanaAppBinder(\n {} as DeviceManagementKit,\n {} as DeviceSessionId,\n contextModuleStub,\n );\n expect(binder).toBeDefined();\n });\n\n describe(\"getAddress\", () => {\n it(\"should return the address\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const address = \"D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5\";\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: address,\n } as DeviceActionState<\n GetAddressDAOutput,\n GetAddressDAError,\n GetAddressDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n const { observable } = appBinder.getAddress({\n derivationPath: \"44'/501'\",\n checkOnDevice: false,\n skipOpenApp: false,\n });\n\n // THEN\n const states: DeviceActionState<\n GetAddressDAOutput,\n GetAddressDAError,\n GetAddressDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: address,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n\n describe(\"calls of executeDeviceAction with the correct params\", () => {\n const baseParams = {\n derivationPath: \"44'/60'/3'/2/1\",\n returnChainCode: false,\n skipOpenApp: false,\n };\n\n it(\"when checkOnDevice is true: UserInteractionRequired.VerifyAddress\", () => {\n // GIVEN\n const checkOnDevice = true;\n const params = {\n ...baseParams,\n checkOnDevice,\n };\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n appBinder.getAddress(params);\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"sessionId\",\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetPubKeyCommand(params),\n appName: \"Solana\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n skipOpenApp: false,\n },\n }),\n });\n });\n\n it(\"when checkOnDevice is false: UserInteractionRequired.None\", () => {\n // GIVEN\n const checkOnDevice = false;\n const params = {\n ...baseParams,\n checkOnDevice,\n };\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n appBinder.getAddress(params);\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"sessionId\",\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetPubKeyCommand(params),\n appName: \"Solana\",\n requiredUserInteraction: UserInteractionRequired.None,\n skipOpenApp: false,\n },\n }),\n });\n });\n });\n });\n\n describe(\"signTransaction\", () => {\n it(\"should return the signature\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const signature = new Uint8Array([0x01, 0x02, 0x03]);\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n } as DeviceActionState<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n const { observable } = appBinder.signTransaction({\n derivationPath: \"44'/501'\",\n transaction: new Uint8Array([0x01, 0x02, 0x03, 0x04]),\n skipOpenApp: false,\n });\n\n // THEN\n const states: DeviceActionState<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n\n it(\"should call executeDeviceAction with the correct params\", () => {\n // GIVEN\n const derivationPath = \"44'/60'/3'/2/1\";\n const transaction = new Uint8Array([0x01, 0x02, 0x03, 0x04]);\n const skipOpenApp = false;\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n appBinder.signTransaction({\n derivationPath,\n transaction,\n skipOpenApp,\n });\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"sessionId\",\n deviceAction: new SignTransactionDeviceAction({\n input: {\n derivationPath,\n transaction,\n skipOpenApp,\n contextModule: contextModuleStub,\n },\n }),\n });\n });\n });\n\n describe(\"signMessage\", () => {\n it(\"should return the signed message\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const signedMessage = new Uint8Array([0x1c, 0x8a, 0x54, 0x05, 0x10]);\n const signMessageArgs = {\n derivationPath: \"44'/501'/0'/0'\",\n message: \"Hello world\",\n skipOpenApp: false,\n };\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: signedMessage,\n } as DeviceActionState<\n Uint8Array,\n DmkError,\n DeviceActionIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n const { observable } = appBinder.signMessage(signMessageArgs);\n\n // THEN\n const states: DeviceActionState<Uint8Array, unknown, unknown>[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: signedMessage,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n });\n\n describe(\"getAppConfiguration\", () => {\n it(\"should return the app configuration\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const appConfiguration = {\n blindSigningEnabled: true,\n pubKeyDisplayMode: \"LONG\",\n version: \"2.5.10\",\n };\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: appConfiguration,\n } as DeviceActionState<\n GetAppConfigurationDAOutput,\n GetAppConfigurationDAError,\n GetAppConfigurationDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n const { observable } = appBinder.getAppConfiguration();\n\n // THEN\n const states: DeviceActionState<\n GetAppConfigurationDAOutput,\n GetAppConfigurationDAError,\n GetAppConfigurationDAIntermediateValue\n >[] = [];\n\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: appConfiguration,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n\n it(\"should call executeDeviceAction with the correct params\", () => {\n // GIVEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n\n // WHEN\n appBinder.getAppConfiguration();\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"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\n describe(\"generateTransaction\", () => {\n it(\"should return the serialized transaction\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const serializedTx = \"BASE64_OR_HEX_TX\";\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: serializedTx,\n } as DeviceActionState<\n GenerateTransactionDAOutput,\n GenerateTransactionDAError,\n GenerateTransactionDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n const { observable } = appBinder.generateTransaction({\n derivationPath: \"44'/501'/0'/0'\",\n skipOpenApp: false,\n });\n\n // THEN\n const states: DeviceActionState<\n GenerateTransactionDAOutput,\n GenerateTransactionDAError,\n GenerateTransactionDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => states.push(state),\n error: (err) => reject(err),\n complete: () => {\n try {\n expect(states).toEqual([\n { status: DeviceActionStatus.Completed, output: serializedTx },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n\n it(\"should call executeDeviceAction with the correct params\", () => {\n // GIVEN\n const derivationPath = \"44'/501'/0'/0'\";\n const skipOpenApp = true;\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n appBinder.generateTransaction({ derivationPath, skipOpenApp });\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"sessionId\",\n deviceAction: new GenerateTransactionDeviceAction({\n input: {\n derivationPath,\n skipOpenApp,\n contextModule: contextModuleStub,\n },\n }),\n });\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n type DeviceActionIntermediateValue,\n type DeviceActionState,\n DeviceActionStatus,\n type DeviceManagementKit,\n type DeviceSessionId,\n type DmkError,\n SendCommandInAppDeviceAction,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { from } from \"rxjs\";\n\nimport {\n type GenerateTransactionDAError,\n type GenerateTransactionDAIntermediateValue,\n type GenerateTransactionDAOutput,\n} from \"@api/app-binder/GenerateTransactionDeviceActionTypes\";\nimport {\n type GetAppConfigurationDAError,\n type GetAppConfigurationDAIntermediateValue,\n type GetAppConfigurationDAOutput,\n} from \"@api/app-binder/GetAppConfigurationDeviceActionTypes\";\nimport {\n type GetAddressDAError,\n type GetAddressDAIntermediateValue,\n type GetAddressDAOutput,\n type SignTransactionDAError,\n type SignTransactionDAIntermediateValue,\n type SignTransactionDAOutput,\n} from \"@api/index\";\n\nimport { GetAppConfigurationCommand } from \"./command/GetAppConfigurationCommand\";\nimport { GetPubKeyCommand } from \"./command/GetPubKeyCommand\";\nimport { GenerateTransactionDeviceAction } from \"./device-action/GenerateTransactionDeviceAction\";\nimport { SignTransactionDeviceAction } from \"./device-action/SignTransactionDeviceAction\";\nimport { SolanaAppBinder } from \"./SolanaAppBinder\";\n\ndescribe(\"SolanaAppBinder\", () => {\n // stub ContextModule for tests\n const contextModuleStub: ContextModule = {} as ContextModule;\n\n const mockedDmk: DeviceManagementKit = {\n sendCommand: vi.fn(),\n executeDeviceAction: vi.fn(),\n } as unknown as DeviceManagementKit;\n\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n it(\"should be defined\", () => {\n const binder = new SolanaAppBinder(\n {} as DeviceManagementKit,\n {} as DeviceSessionId,\n contextModuleStub,\n );\n expect(binder).toBeDefined();\n });\n\n describe(\"getAddress\", () => {\n it(\"should return the address\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const address = \"D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5\";\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: address,\n } as DeviceActionState<\n GetAddressDAOutput,\n GetAddressDAError,\n GetAddressDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n const { observable } = appBinder.getAddress({\n derivationPath: \"44'/501'\",\n checkOnDevice: false,\n skipOpenApp: false,\n });\n\n // THEN\n const states: DeviceActionState<\n GetAddressDAOutput,\n GetAddressDAError,\n GetAddressDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: address,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n\n describe(\"calls of executeDeviceAction with the correct params\", () => {\n const baseParams = {\n derivationPath: \"44'/60'/3'/2/1\",\n returnChainCode: false,\n skipOpenApp: false,\n };\n\n it(\"when checkOnDevice is true: UserInteractionRequired.VerifyAddress\", () => {\n // GIVEN\n const checkOnDevice = true;\n const params = {\n ...baseParams,\n checkOnDevice,\n };\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n appBinder.getAddress(params);\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"sessionId\",\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetPubKeyCommand(params),\n appName: \"Solana\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n skipOpenApp: false,\n },\n }),\n });\n });\n\n it(\"when checkOnDevice is false: UserInteractionRequired.None\", () => {\n // GIVEN\n const checkOnDevice = false;\n const params = {\n ...baseParams,\n checkOnDevice,\n };\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n appBinder.getAddress(params);\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"sessionId\",\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetPubKeyCommand(params),\n appName: \"Solana\",\n requiredUserInteraction: UserInteractionRequired.None,\n skipOpenApp: false,\n },\n }),\n });\n });\n });\n });\n\n describe(\"signTransaction\", () => {\n it(\"should return the signature\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const signature = new Uint8Array([0x01, 0x02, 0x03]);\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n } as DeviceActionState<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n const { observable } = appBinder.signTransaction({\n derivationPath: \"44'/501'\",\n transaction: new Uint8Array([0x01, 0x02, 0x03, 0x04]),\n solanaTransactionOptions: { skipOpenApp: false },\n });\n\n // THEN\n const states: DeviceActionState<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n\n it(\"should call executeDeviceAction with the correct params\", () => {\n // GIVEN\n const derivationPath = \"44'/60'/3'/2/1\";\n const transaction = new Uint8Array([0x01, 0x02, 0x03, 0x04]);\n const skipOpenApp = false;\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n appBinder.signTransaction({\n derivationPath,\n transaction,\n solanaTransactionOptions: { skipOpenApp: false },\n });\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"sessionId\",\n deviceAction: new SignTransactionDeviceAction({\n input: {\n derivationPath,\n transaction,\n transactionOptions: { skipOpenApp },\n contextModule: contextModuleStub,\n },\n }),\n });\n });\n });\n\n describe(\"signMessage\", () => {\n it(\"should return the signed message\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const signedMessage = new Uint8Array([0x1c, 0x8a, 0x54, 0x05, 0x10]);\n const signMessageArgs = {\n derivationPath: \"44'/501'/0'/0'\",\n message: \"Hello world\",\n skipOpenApp: false,\n };\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: signedMessage,\n } as DeviceActionState<\n Uint8Array,\n DmkError,\n DeviceActionIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n const { observable } = appBinder.signMessage(signMessageArgs);\n\n // THEN\n const states: DeviceActionState<Uint8Array, unknown, unknown>[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: signedMessage,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n });\n\n describe(\"getAppConfiguration\", () => {\n it(\"should return the app configuration\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const appConfiguration = {\n blindSigningEnabled: true,\n pubKeyDisplayMode: \"LONG\",\n version: \"2.5.10\",\n };\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: appConfiguration,\n } as DeviceActionState<\n GetAppConfigurationDAOutput,\n GetAppConfigurationDAError,\n GetAppConfigurationDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n const { observable } = appBinder.getAppConfiguration();\n\n // THEN\n const states: DeviceActionState<\n GetAppConfigurationDAOutput,\n GetAppConfigurationDAError,\n GetAppConfigurationDAIntermediateValue\n >[] = [];\n\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: appConfiguration,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n\n it(\"should call executeDeviceAction with the correct params\", () => {\n // GIVEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n\n // WHEN\n appBinder.getAppConfiguration();\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"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\n describe(\"generateTransaction\", () => {\n it(\"should return the serialized transaction\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const serializedTx = \"BASE64_OR_HEX_TX\";\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: serializedTx,\n } as DeviceActionState<\n GenerateTransactionDAOutput,\n GenerateTransactionDAError,\n GenerateTransactionDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n const { observable } = appBinder.generateTransaction({\n derivationPath: \"44'/501'/0'/0'\",\n skipOpenApp: false,\n });\n\n // THEN\n const states: DeviceActionState<\n GenerateTransactionDAOutput,\n GenerateTransactionDAError,\n GenerateTransactionDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => states.push(state),\n error: (err) => reject(err),\n complete: () => {\n try {\n expect(states).toEqual([\n { status: DeviceActionStatus.Completed, output: serializedTx },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n\n it(\"should call executeDeviceAction with the correct params\", () => {\n // GIVEN\n const derivationPath = \"44'/501'/0'/0'\";\n const skipOpenApp = true;\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n appBinder.generateTransaction({ derivationPath, skipOpenApp });\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"sessionId\",\n deviceAction: new GenerateTransactionDeviceAction({\n input: {\n derivationPath,\n skipOpenApp,\n contextModule: contextModuleStub,\n },\n }),\n });\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["import_device_management_kit", "import_rxjs", "import_GetAppConfigurationCommand", "import_GetPubKeyCommand", "import_GenerateTransactionDeviceAction", "import_SignTransactionDeviceAction", "import_SolanaAppBinder", "contextModuleStub", "mockedDmk", "binder", "resolve", "reject", "address", "appBinder", "observable", "states", "state", "err", "baseParams", "params", "signature", "derivationPath", "transaction", "skipOpenApp", "signedMessage", "signMessageArgs", "appConfiguration", "serializedTx"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var d=Object.defineProperty;var
|
|
1
|
+
"use strict";var d=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var R=Object.prototype.hasOwnProperty;var E=(o,a)=>{for(var s in a)d(o,s,{get:a[s],enumerable:!0})},v=(o,a,s,c)=>{if(a&&typeof a=="object"||typeof a=="function")for(let i of f(a))!R.call(o,i)&&i!==s&&d(o,i,{get:()=>a[i],enumerable:!(c=D(a,i))||c.enumerable});return o};var I=o=>v(d({},"__esModule",{value:!0}),o);var k={};E(k,{SignTransactionDeviceAction:()=>h});module.exports=I(k);var e=require("@ledgerhq/device-management-kit"),u=require("purify-ts"),n=require("xstate"),C=require("../../app-binder/command/GetAppConfigurationCommand"),T=require("../../app-binder/command/SignTransactionCommand"),m=require("../../app-binder/services/ApplicationChecker"),l=require("../../app-binder/services/TransactionInspector"),A=require("../../app-binder/task/BuildTransactionContextTask"),y=require("../../app-binder/task/ProvideTransactionContextTask"),x=require("../../app-binder/task/SendSignDataTask");class h extends e.XStateDeviceAction{makeStateMachine(a){const{signTransaction:s,getAppConfig:c,buildContext:i,provideContext:g,inspectTransaction:S}=this.extractDependencies(a);return(0,n.setup)({types:{input:{},context:{},output:{}},actors:{openAppStateMachine:new e.OpenAppDeviceAction({input:{appName:"Solana"}}).makeStateMachine(a),getAppConfig:(0,n.fromPromise)(c),inspectTransaction:(0,n.fromPromise)(({input:t})=>S({serializedTransaction:t.serializedTransaction,resolutionContext:t.resolutionContext,RPCURL:t.RPCURL})),buildContext:(0,n.fromPromise)(i),provideContext:(0,n.fromPromise)(g),signTransaction:(0,n.fromPromise)(s)},guards:{noInternalError:({context:t})=>t._internalState.error===null,skipOpenApp:({context:t})=>t.input.transactionOptions?.skipOpenApp||!1,isSPLSupported:({context:t})=>new m.ApplicationChecker(a.getDeviceSessionState(),t._internalState.appConfig).withMinVersionExclusive("1.4.0").excludeDeviceModel(e.DeviceModelId.NANO_S).check(),isAnSPLTransaction:({context:t})=>t._internalState.inspectorResult?.transactionType===l.SolanaTransactionTypes.SPL,shouldSkipInspection:({context:t})=>t._internalState.error===null&&!!t.input.transactionOptions?.transactionResolutionContext},actions:{assignErrorFromEvent:(0,n.assign)({_internalState:t=>({...t.context._internalState,error:new e.UnknownDAError(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:e.UserInteractionRequired.None},_internalState:{error:null,signature:null,appConfig:null,solanaTransactionContext:null,inspectorResult:null}}),states:{InitialState:{always:[{target:"GetAppConfig",guard:"skipOpenApp"},{target:"OpenAppDeviceAction"}]},OpenAppDeviceAction:{exit:(0,n.assign)({intermediateValue:()=>({requiredUserInteraction:e.UserInteractionRequired.None})}),invoke:{id:"openAppStateMachine",src:"openAppStateMachine",input:()=>({appName:"Solana"}),onSnapshot:{actions:(0,n.assign)({intermediateValue:({event:t})=>t.snapshot.context.intermediateValue})},onDone:{target:"CheckOpenAppDeviceActionResult",actions:(0,n.assign)({_internalState:({event:t,context:r})=>t.output.caseOf({Right:()=>r._internalState,Left:p=>({...r._internalState,error:p})})})}}},CheckOpenAppDeviceActionResult:{always:[{target:"GetAppConfig",guard:"noInternalError"},{target:"Error"}]},GetAppConfig:{entry:(0,n.assign)({intermediateValue:()=>({requiredUserInteraction:e.UserInteractionRequired.None})}),invoke:{id:"getAppConfig",src:"getAppConfig",onDone:{target:"GetAppConfigResultCheck",actions:(0,n.assign)({_internalState:({event:t,context:r})=>(0,e.isSuccessCommandResult)(t.output)?{...r._internalState,appConfig:t.output.data}:{...r._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})=>({serializedTransaction:t.input.transaction,resolutionContext:t.input.transactionOptions?.transactionResolutionContext,RPCURL:t.input.transactionOptions?.solanaRPCURL}),onDone:{target:"AfterInspect",actions:(0,n.assign)({_internalState:({context:t,event:r})=>({...t._internalState,inspectorResult:r.output})})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},AfterInspect:{always:[{target:"BuildContext",guard:"isAnSPLTransaction"},{target:"SignTransaction",guard:"noInternalError"},{target:"Error"}]},BuildContext:{entry:(0,n.assign)({intermediateValue:()=>({requiredUserInteraction:e.UserInteractionRequired.None})}),invoke:{id:"buildContext",src:"buildContext",input:({context:t})=>{const r=t._internalState.inspectorResult?.data;return{contextModule:t.input.contextModule,options:{tokenAddress:r?.tokenAddress,createATA:r?.createATA}}},onDone:{target:"ProvideContext",actions:[(0,n.assign)({_internalState:({event:t,context:r})=>({...r._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:(0,n.assign)({intermediateValue:()=>({requiredUserInteraction:e.UserInteractionRequired.None})}),invoke:{id:"provideContext",src:"provideContext",input:({context:t})=>{if(!t._internalState.solanaTransactionContext)throw new e.UnknownDAError("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:(0,n.assign)({intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction}}),exit:(0,n.assign)({intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None}}),invoke:{id:"signTransaction",src:"signTransaction",input:({context:t})=>({derivationPath:t.input.derivationPath,serializedTransaction:t.input.transaction}),onDone:{target:"SignTransactionResultCheck",actions:[(0,n.assign)({_internalState:({event:t,context:r})=>{if(!(0,e.isSuccessCommandResult)(t.output))return{...r._internalState,error:t.output.error};const p=t.output.data.extract();return t.output.data.isJust()&&p instanceof Uint8Array?{...r._internalState,signature:p}:{...r._internalState,error:new e.UnknownDAError("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?(0,u.Right)(t._internalState.signature):(0,u.Left)(t._internalState.error||new e.UnknownDAError("No error or signature available"))})}extractDependencies(a){return{getAppConfig:async()=>a.sendCommand(new C.GetAppConfigurationCommand),buildContext:async t=>new A.BuildTransactionContextTask(a,t.input).run(),provideContext:async t=>new y.ProvideSolanaTransactionContextTask(a,t.input).run(),signTransaction:async t=>new x.SignDataTask(a,{commandFactory:r=>new T.SignTransactionCommand({serializedTransaction:r.chunkedData,more:r.more,extend:r.extend}),derivationPath:t.input.derivationPath,sendingData:t.input.serializedTransaction}).run(),inspectTransaction:async t=>Promise.resolve(new l.TransactionInspector(t.serializedTransaction,t.resolutionContext?.tokenAddress,t.resolutionContext?.createATA,t.RPCURL).inspectTransactionType())}}}0&&(module.exports={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": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iCAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAYO,2CACPC,EAAwC,qBACxCC,EAA2C,
|
|
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/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 resolutionContext?: TransactionResolutionContext;\n RPCURL?: string;\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\n getAppConfig: fromPromise(getAppConfig),\n inspectTransaction: fromPromise(\n ({\n input,\n }: {\n input: {\n serializedTransaction: Uint8Array;\n resolutionContext?: TransactionResolutionContext;\n RPCURL?: string;\n };\n }) =>\n inspectTransaction({\n serializedTransaction: input.serializedTransaction,\n resolutionContext: input.resolutionContext,\n RPCURL: input.RPCURL,\n }),\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 }) =>\n context.input.transactionOptions?.skipOpenApp || false,\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.transactionOptions?.transactionResolutionContext,\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\n input: ({ context }) => ({\n serializedTransaction: context.input.transaction,\n resolutionContext:\n context.input.transactionOptions?.transactionResolutionContext,\n RPCURL: context.input.transactionOptions?.solanaRPCURL,\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 RPCURL?: string;\n }) =>\n Promise.resolve(\n new TransactionInspector(\n arg0.serializedTransaction,\n arg0.resolutionContext?.tokenAddress,\n arg0.resolutionContext?.createATA,\n arg0.RPCURL,\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": ["SignTransactionDeviceAction_exports", "__export", "SignTransactionDeviceAction", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_xstate", "import_GetAppConfigurationCommand", "import_SignTransactionCommand", "import_ApplicationChecker", "import_TransactionInspector", "import_BuildTransactionContextTask", "import_ProvideTransactionContextTask", "import_SendSignDataTask", "internalApi", "signTransaction", "getAppConfig", "buildContext", "provideContext", "inspectTransaction", "input", "context", "_", "event", "error", "inspectorData", "data", "arg0", "args"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("@ledgerhq/device-management-kit"),r=require("purify-ts"),t=require("vitest"),m=require("../../app-binder/device-action/__test-utils__/testDeviceActionStates"),c=require("../../app-binder/services/TransactionInspector"),f=require("./__test-utils__/makeInternalApi"),A=require("./SignTransactionDeviceAction");const v="44'/501'/0'/0'",y=new Uint8Array([222,173,190,239]),T={getSolanaContext:t.vi.fn(),
|
|
1
|
+
"use strict";var e=require("@ledgerhq/device-management-kit"),r=require("purify-ts"),t=require("vitest"),m=require("../../app-binder/device-action/__test-utils__/testDeviceActionStates"),c=require("../../app-binder/services/TransactionInspector"),f=require("./__test-utils__/makeInternalApi"),A=require("./SignTransactionDeviceAction");const v="44'/501'/0'/0'",y=new Uint8Array([222,173,190,239]),T={getSolanaContext:t.vi.fn(),getContext:t.vi.fn(),getContexts:t.vi.fn(),getTypedDataFilters:t.vi.fn(),getWeb3Checks:t.vi.fn()};let i,u,d,S,g,l;function D(){return{getAppConfig:u,buildContext:d,provideContext:S,signTransaction:g,inspectTransaction:l}}(0,t.describe)("SignTransactionDeviceAction (Solana)",()=>{(0,t.beforeEach)(()=>{i=(0,f.makeDeviceActionInternalApiMock)(),u=t.vi.fn(),d=t.vi.fn(),S=t.vi.fn(),g=t.vi.fn(),l=t.vi.fn().mockResolvedValue({transactionType:c.SolanaTransactionTypes.SPL,data:{tokenAddress:null,createATA:!1}})}),(0,t.it)("happy path (skip open): getAppConfig -> inspect -> build -> provide -> sign",()=>new Promise((o,s)=>{i.getDeviceSessionState.mockReturnValue({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.1"},deviceModelId:e.DeviceModelId.NANO_X,isSecureConnectionAllowed:!0}),u.mockResolvedValue((0,e.CommandResultFactory)({data:{}})),l.mockResolvedValue({transactionType:c.SolanaTransactionTypes.SPL});const n={descriptor:new Uint8Array([1]),calCertificate:{keyUsageNumber:0,payload:new Uint8Array([1])},challenge:void 0,addressResult:{tokenAccount:"",owner:"",contract:""}};d.mockResolvedValue(n),S.mockResolvedValue(r.Nothing);const a=new Uint8Array([170,187]);g.mockResolvedValue((0,e.CommandResultFactory)({data:(0,r.Just)(a)}));const p=new A.SignTransactionDeviceAction({input:{derivationPath:v,transaction:y,transactionOptions:{skipOpenApp:!0},contextModule:T}});t.vi.spyOn(p,"extractDependencies").mockReturnValue(D());const k=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction},status:e.DeviceActionStatus.Pending},{output:a,status:e.DeviceActionStatus.Completed}];(0,m.testDeviceActionStates)(p,k,i,{onDone:o,onError:s})})),(0,t.it)("failure in provideContext still signs",()=>new Promise((o,s)=>{i.getDeviceSessionState.mockReturnValue({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.1"},deviceModelId:e.DeviceModelId.NANO_X,isSecureConnectionAllowed:!0}),u.mockResolvedValue((0,e.CommandResultFactory)({data:{}})),l.mockResolvedValue({transactionType:c.SolanaTransactionTypes.SPL}),d.mockResolvedValue({descriptor:new Uint8Array([2]),calCertificate:{keyUsageNumber:0,payload:new Uint8Array},challenge:void 0,addressResult:{tokenAccount:"",owner:"",contract:""}}),S.mockResolvedValue((0,r.Just)((0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("ctxErr")})));const n=new Uint8Array([254]);g.mockResolvedValue((0,e.CommandResultFactory)({data:(0,r.Just)(n)}));const a=new A.SignTransactionDeviceAction({input:{derivationPath:v,transaction:y,transactionOptions:{skipOpenApp:!0},contextModule:T}});t.vi.spyOn(a,"extractDependencies").mockReturnValue(D());const p=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction},status:e.DeviceActionStatus.Pending},{output:n,status:e.DeviceActionStatus.Completed}];(0,m.testDeviceActionStates)(a,p,i,{onDone:o,onError:s})})),(0,t.it)("buildContext throws \u2192 error",()=>new Promise((o,s)=>{i.getDeviceSessionState.mockReturnValue({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.1"},deviceModelId:e.DeviceModelId.NANO_X,isSecureConnectionAllowed:!0}),u.mockResolvedValue((0,e.CommandResultFactory)({data:{}})),l.mockResolvedValue({transactionType:c.SolanaTransactionTypes.SPL}),d.mockRejectedValue(new e.InvalidStatusWordError("bldErr"));const n=new A.SignTransactionDeviceAction({input:{derivationPath:v,transaction:y,transactionOptions:{skipOpenApp:!0},contextModule:T}});t.vi.spyOn(n,"extractDependencies").mockReturnValue(D());const a=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{error:expect.anything(),status:e.DeviceActionStatus.Error}];(0,m.testDeviceActionStates)(n,a,i,{onDone:o,onError:s})}))});
|
|
2
2
|
//# sourceMappingURL=SignTransactionDeviceAction.test.js.map
|