@bsv/wallet-toolbox 1.1.61 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/docs/client.md +2339 -182
  2. package/docs/wallet.md +2339 -182
  3. package/out/src/CWIStyleWalletManager.d.ts +417 -0
  4. package/out/src/CWIStyleWalletManager.d.ts.map +1 -0
  5. package/out/src/CWIStyleWalletManager.js +1153 -0
  6. package/out/src/CWIStyleWalletManager.js.map +1 -0
  7. package/out/src/SimpleWalletManager.d.ts +169 -0
  8. package/out/src/SimpleWalletManager.d.ts.map +1 -0
  9. package/out/src/SimpleWalletManager.js +315 -0
  10. package/out/src/SimpleWalletManager.js.map +1 -0
  11. package/out/src/Wallet.d.ts +6 -1
  12. package/out/src/Wallet.d.ts.map +1 -1
  13. package/out/src/Wallet.js +39 -7
  14. package/out/src/Wallet.js.map +1 -1
  15. package/out/src/WalletAuthenticationManager.d.ts +33 -0
  16. package/out/src/WalletAuthenticationManager.d.ts.map +1 -0
  17. package/out/src/WalletAuthenticationManager.js +110 -0
  18. package/out/src/WalletAuthenticationManager.js.map +1 -0
  19. package/out/src/WalletPermissionsManager.d.ts +575 -0
  20. package/out/src/WalletPermissionsManager.d.ts.map +1 -0
  21. package/out/src/WalletPermissionsManager.js +1789 -0
  22. package/out/src/WalletPermissionsManager.js.map +1 -0
  23. package/out/src/WalletSettingsManager.d.ts +59 -0
  24. package/out/src/WalletSettingsManager.d.ts.map +1 -0
  25. package/out/src/WalletSettingsManager.js +189 -0
  26. package/out/src/WalletSettingsManager.js.map +1 -0
  27. package/out/src/__tests/CWIStyleWalletManager.test.d.ts +2 -0
  28. package/out/src/__tests/CWIStyleWalletManager.test.d.ts.map +1 -0
  29. package/out/src/__tests/CWIStyleWalletManager.test.js +471 -0
  30. package/out/src/__tests/CWIStyleWalletManager.test.js.map +1 -0
  31. package/out/src/__tests/WalletPermissionsManager.callbacks.test.d.ts +2 -0
  32. package/out/src/__tests/WalletPermissionsManager.callbacks.test.d.ts.map +1 -0
  33. package/out/src/__tests/WalletPermissionsManager.callbacks.test.js +239 -0
  34. package/out/src/__tests/WalletPermissionsManager.callbacks.test.js.map +1 -0
  35. package/out/src/__tests/WalletPermissionsManager.checks.test.d.ts +2 -0
  36. package/out/src/__tests/WalletPermissionsManager.checks.test.d.ts.map +1 -0
  37. package/out/src/__tests/WalletPermissionsManager.checks.test.js +637 -0
  38. package/out/src/__tests/WalletPermissionsManager.checks.test.js.map +1 -0
  39. package/out/src/__tests/WalletPermissionsManager.encryption.test.d.ts +2 -0
  40. package/out/src/__tests/WalletPermissionsManager.encryption.test.d.ts.map +1 -0
  41. package/out/src/__tests/WalletPermissionsManager.encryption.test.js +295 -0
  42. package/out/src/__tests/WalletPermissionsManager.encryption.test.js.map +1 -0
  43. package/out/src/__tests/WalletPermissionsManager.fixtures.d.ts +83 -0
  44. package/out/src/__tests/WalletPermissionsManager.fixtures.d.ts.map +1 -0
  45. package/out/src/__tests/WalletPermissionsManager.fixtures.js +261 -0
  46. package/out/src/__tests/WalletPermissionsManager.fixtures.js.map +1 -0
  47. package/out/src/__tests/WalletPermissionsManager.flows.test.d.ts +2 -0
  48. package/out/src/__tests/WalletPermissionsManager.flows.test.d.ts.map +1 -0
  49. package/out/src/__tests/WalletPermissionsManager.flows.test.js +377 -0
  50. package/out/src/__tests/WalletPermissionsManager.flows.test.js.map +1 -0
  51. package/out/src/__tests/WalletPermissionsManager.initialization.test.d.ts +2 -0
  52. package/out/src/__tests/WalletPermissionsManager.initialization.test.d.ts.map +1 -0
  53. package/out/src/__tests/WalletPermissionsManager.initialization.test.js +227 -0
  54. package/out/src/__tests/WalletPermissionsManager.initialization.test.js.map +1 -0
  55. package/out/src/__tests/WalletPermissionsManager.proxying.test.d.ts +2 -0
  56. package/out/src/__tests/WalletPermissionsManager.proxying.test.d.ts.map +1 -0
  57. package/out/src/__tests/WalletPermissionsManager.proxying.test.js +566 -0
  58. package/out/src/__tests/WalletPermissionsManager.proxying.test.js.map +1 -0
  59. package/out/src/__tests/WalletPermissionsManager.tokens.test.d.ts +2 -0
  60. package/out/src/__tests/WalletPermissionsManager.tokens.test.d.ts.map +1 -0
  61. package/out/src/__tests/WalletPermissionsManager.tokens.test.js +454 -0
  62. package/out/src/__tests/WalletPermissionsManager.tokens.test.js.map +1 -0
  63. package/out/src/index.all.d.ts +9 -0
  64. package/out/src/index.all.d.ts.map +1 -1
  65. package/out/src/index.all.js +9 -0
  66. package/out/src/index.all.js.map +1 -1
  67. package/out/src/index.client.d.ts +9 -0
  68. package/out/src/index.client.d.ts.map +1 -1
  69. package/out/src/index.client.js +9 -0
  70. package/out/src/index.client.js.map +1 -1
  71. package/out/src/sdk/CertOpsWallet.d.ts +7 -0
  72. package/out/src/sdk/CertOpsWallet.d.ts.map +1 -0
  73. package/out/src/sdk/CertOpsWallet.js +3 -0
  74. package/out/src/sdk/CertOpsWallet.js.map +1 -0
  75. package/out/src/sdk/__test/CertificateLifeCycle.test.js +19 -82
  76. package/out/src/sdk/__test/CertificateLifeCycle.test.js.map +1 -1
  77. package/out/src/sdk/index.d.ts +1 -1
  78. package/out/src/sdk/index.d.ts.map +1 -1
  79. package/out/src/sdk/index.js +1 -1
  80. package/out/src/sdk/index.js.map +1 -1
  81. package/out/src/sdk/validationHelpers.d.ts.map +1 -1
  82. package/out/src/sdk/validationHelpers.js +13 -12
  83. package/out/src/sdk/validationHelpers.js.map +1 -1
  84. package/out/src/services/__tests/ARC.test.js +9 -0
  85. package/out/src/services/__tests/ARC.test.js.map +1 -1
  86. package/out/src/services/__tests/bitrails.test.js +7 -2
  87. package/out/src/services/__tests/bitrails.test.js.map +1 -1
  88. package/out/src/services/providers/ARC.js +1 -1
  89. package/out/src/services/providers/ARC.js.map +1 -1
  90. package/out/src/services/providers/__tests/WhatsOnChain.test.js +3 -3
  91. package/out/src/services/providers/__tests/WhatsOnChain.test.js.map +1 -1
  92. package/out/src/signer/methods/proveCertificate.d.ts.map +1 -1
  93. package/out/src/signer/methods/proveCertificate.js +3 -19
  94. package/out/src/signer/methods/proveCertificate.js.map +1 -1
  95. package/out/src/storage/__test/WalletStorageManager.test.js +1 -1
  96. package/out/src/storage/__test/WalletStorageManager.test.js.map +1 -1
  97. package/out/src/storage/methods/listOutputs.js +1 -1
  98. package/out/src/storage/methods/listOutputs.js.map +1 -1
  99. package/out/src/storage/remoting/StorageClient.d.ts +2 -2
  100. package/out/src/storage/remoting/StorageClient.d.ts.map +1 -1
  101. package/out/src/storage/remoting/StorageClient.js +1 -1
  102. package/out/src/storage/remoting/StorageClient.js.map +1 -1
  103. package/out/src/utility/identityUtils.d.ts +31 -0
  104. package/out/src/utility/identityUtils.d.ts.map +1 -0
  105. package/out/src/utility/identityUtils.js +116 -0
  106. package/out/src/utility/identityUtils.js.map +1 -0
  107. package/out/src/wab-client/WABClient.d.ts +49 -0
  108. package/out/src/wab-client/WABClient.d.ts.map +1 -0
  109. package/out/src/wab-client/WABClient.js +83 -0
  110. package/out/src/wab-client/WABClient.js.map +1 -0
  111. package/out/src/wab-client/__tests/WABClient.man.test.d.ts +2 -0
  112. package/out/src/wab-client/__tests/WABClient.man.test.d.ts.map +1 -0
  113. package/out/src/wab-client/__tests/WABClient.man.test.js +52 -0
  114. package/out/src/wab-client/__tests/WABClient.man.test.js.map +1 -0
  115. package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.d.ts +34 -0
  116. package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.d.ts.map +1 -0
  117. package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.js +16 -0
  118. package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.js.map +1 -0
  119. package/out/src/wab-client/auth-method-interactors/PersonaIDInteractor.d.ts +7 -0
  120. package/out/src/wab-client/auth-method-interactors/PersonaIDInteractor.d.ts.map +1 -0
  121. package/out/src/wab-client/auth-method-interactors/PersonaIDInteractor.js +36 -0
  122. package/out/src/wab-client/auth-method-interactors/PersonaIDInteractor.js.map +1 -0
  123. package/out/src/wab-client/auth-method-interactors/TwilioPhoneInteractor.d.ts +28 -0
  124. package/out/src/wab-client/auth-method-interactors/TwilioPhoneInteractor.d.ts.map +1 -0
  125. package/out/src/wab-client/auth-method-interactors/TwilioPhoneInteractor.js +69 -0
  126. package/out/src/wab-client/auth-method-interactors/TwilioPhoneInteractor.js.map +1 -0
  127. package/out/test/Wallet/action/internalizeAction.a.test.js +1 -1
  128. package/out/test/Wallet/action/internalizeAction.a.test.js.map +1 -1
  129. package/out/test/Wallet/certificate/acquireCertificate.test.js +26 -29
  130. package/out/test/Wallet/certificate/acquireCertificate.test.js.map +1 -1
  131. package/out/test/Wallet/local/localWallet.man.test.d.ts.map +1 -1
  132. package/out/test/Wallet/local/localWallet.man.test.js +25 -10
  133. package/out/test/Wallet/local/localWallet.man.test.js.map +1 -1
  134. package/out/test/storage/KnexMigrations.test.js +1 -1
  135. package/out/test/storage/KnexMigrations.test.js.map +1 -1
  136. package/out/test/storage/update.test.js +1 -1
  137. package/out/test/storage/update.test.js.map +1 -1
  138. package/out/test/utils/TestUtilsWalletStorage.d.ts +9 -5
  139. package/out/test/utils/TestUtilsWalletStorage.d.ts.map +1 -1
  140. package/out/test/utils/TestUtilsWalletStorage.js +15 -9
  141. package/out/test/utils/TestUtilsWalletStorage.js.map +1 -1
  142. package/out/test/wallet/action/internalizeAction.test.js +1 -1
  143. package/out/test/wallet/action/internalizeAction.test.js.map +1 -1
  144. package/out/test/wallet/list/listActions2.test.js +1 -1
  145. package/out/test/wallet/list/listActions2.test.js.map +1 -1
  146. package/out/test/wallet/sync/Wallet.sync.test.js +1 -1
  147. package/out/test/wallet/sync/Wallet.sync.test.js.map +1 -1
  148. package/out/tsconfig.all.tsbuildinfo +1 -1
  149. package/package.json +3 -4
  150. package/src/CWIStyleWalletManager.ts +1738 -0
  151. package/src/SimpleWalletManager.ts +526 -0
  152. package/src/Wallet.ts +70 -7
  153. package/src/WalletAuthenticationManager.ts +150 -0
  154. package/src/WalletPermissionsManager.ts +2424 -0
  155. package/src/WalletSettingsManager.ts +243 -0
  156. package/src/__tests/CWIStyleWalletManager.test.ts +604 -0
  157. package/src/__tests/WalletPermissionsManager.callbacks.test.ts +323 -0
  158. package/src/__tests/WalletPermissionsManager.checks.test.ts +839 -0
  159. package/src/__tests/WalletPermissionsManager.encryption.test.ts +370 -0
  160. package/src/__tests/WalletPermissionsManager.fixtures.ts +284 -0
  161. package/src/__tests/WalletPermissionsManager.flows.test.ts +457 -0
  162. package/src/__tests/WalletPermissionsManager.initialization.test.ts +300 -0
  163. package/src/__tests/WalletPermissionsManager.proxying.test.ts +706 -0
  164. package/src/__tests/WalletPermissionsManager.tokens.test.ts +546 -0
  165. package/src/index.all.ts +9 -0
  166. package/src/index.client.ts +9 -0
  167. package/src/sdk/CertOpsWallet.ts +18 -0
  168. package/src/sdk/__test/CertificateLifeCycle.test.ts +66 -113
  169. package/src/sdk/index.ts +1 -1
  170. package/src/sdk/validationHelpers.ts +12 -11
  171. package/src/services/__tests/ARC.test.ts +14 -1
  172. package/src/services/__tests/bitrails.test.ts +7 -2
  173. package/src/services/processingErrors/arcSuccessError.json +76 -0
  174. package/src/services/providers/ARC.ts +1 -1
  175. package/src/services/providers/__tests/WhatsOnChain.test.ts +3 -3
  176. package/src/signer/methods/proveCertificate.ts +14 -21
  177. package/src/storage/__test/WalletStorageManager.test.ts +1 -1
  178. package/src/storage/methods/listOutputs.ts +1 -1
  179. package/src/storage/remoting/StorageClient.ts +4 -4
  180. package/src/utility/identityUtils.ts +159 -0
  181. package/src/wab-client/WABClient.ts +94 -0
  182. package/src/wab-client/__tests/WABClient.man.test.ts +59 -0
  183. package/src/wab-client/auth-method-interactors/AuthMethodInteractor.ts +47 -0
  184. package/src/wab-client/auth-method-interactors/PersonaIDInteractor.ts +35 -0
  185. package/src/wab-client/auth-method-interactors/TwilioPhoneInteractor.ts +72 -0
  186. package/test/Wallet/action/internalizeAction.a.test.ts +1 -1
  187. package/test/Wallet/certificate/acquireCertificate.test.ts +89 -30
  188. package/test/Wallet/local/localWallet.man.test.ts +20 -4
  189. package/test/storage/KnexMigrations.test.ts +1 -1
  190. package/test/storage/update.test.ts +1 -1
  191. package/test/utils/TestUtilsWalletStorage.ts +24 -13
  192. package/test/wallet/action/internalizeAction.test.ts +1 -1
  193. package/test/wallet/list/listActions2.test.ts +1 -1
  194. package/test/wallet/sync/Wallet.sync.test.ts +1 -1
  195. package/out/src/sdk/CertOps.d.ts +0 -66
  196. package/out/src/sdk/CertOps.d.ts.map +0 -1
  197. package/out/src/sdk/CertOps.js +0 -190
  198. package/out/src/sdk/CertOps.js.map +0 -1
  199. package/src/sdk/CertOps.ts +0 -274
@@ -27,7 +27,10 @@ import {
27
27
  } from '../../../src'
28
28
  import { _tu, TestWalletNoSetup } from '../../utils/TestUtilsWalletStorage'
29
29
  import { monitorEventLoopDelay } from 'perf_hooks'
30
- import { validateCreateActionArgs, ValidCreateActionArgs } from '../../../src/sdk'
30
+ import { specOpInvalidChange, validateCreateActionArgs, ValidCreateActionArgs } from '../../../src/sdk'
31
+
32
+ const setActiveClient = true
33
+ const useMySQLConnectionForClient = true
31
34
 
32
35
  describe('localWallet tests', () => {
33
36
  jest.setTimeout(99999999)
@@ -82,16 +85,29 @@ describe('localWallet tests', () => {
82
85
 
83
86
  test('4 review change utxos', async () => {
84
87
  const setup = await createSetup('test')
88
+ const lor = await setup.wallet.listOutputs({
89
+ basket: specOpInvalidChange,
90
+ limit: 1000
91
+ })
92
+ if (lor.totalOutputs > 0) {
93
+ debugger
94
+ const lor = await setup.wallet.listOutputs({
95
+ basket: specOpInvalidChange,
96
+ tags: ['release']
97
+ })
98
+ }
99
+ /*
85
100
  const storage = setup.activeStorage
86
101
  const services = setup.services
87
102
  const { invalidSpendableOutputs: notUtxos } = await confirmSpendableOutputs(storage, services)
88
103
  const outputsToUpdate = notUtxos.map(o => ({ id: o.outputId, satoshis: o.satoshis }))
89
104
  const total: number = outputsToUpdate.reduce((t, o) => t + o.satoshis, 0)
90
105
  debugger
91
- // *** About set spendable = false for outputs ***/
106
+ // *** About set spendable = false for outputs ***
92
107
  for (const o of outputsToUpdate) {
93
108
  await storage.updateOutput(o.id, { spendable: false })
94
109
  }
110
+ */
95
111
  await setup.wallet.destroy()
96
112
  })
97
113
 
@@ -125,9 +141,9 @@ async function createSetup(chain: sdk.Chain): Promise<TestWalletNoSetup> {
125
141
  chain,
126
142
  rootKeyHex: env.devKeys[env.testIdentityKey],
127
143
  filePath: env.testFilePath,
128
- setActiveClient: false,
144
+ setActiveClient,
129
145
  addLocalBackup: false,
130
- useMySQLConnectionForClient: false
146
+ useMySQLConnectionForClient
131
147
  })
132
148
 
133
149
  console.log(`ACTIVE STORAGE: ${setup.storage.getActiveStoreName()}`)
@@ -6,7 +6,7 @@ describe('KnexMigrations tests', () => {
6
6
  jest.setTimeout(99999999)
7
7
 
8
8
  const knexs: Knex[] = []
9
- const env = _tu.getEnv('test')
9
+ const env = _tu.getEnvFlags('test')
10
10
 
11
11
  beforeAll(async () => {
12
12
  const localSQLiteFile = await _tu.newTmpFile('migratetest.sqlite', false, false, true)
@@ -25,7 +25,7 @@ describe('update tests', () => {
25
25
  jest.setTimeout(99999999)
26
26
 
27
27
  const chain: sdk.Chain = 'test'
28
- const env = _tu.getEnv(chain)
28
+ const env = _tu.getEnvFlags(chain)
29
29
  const testName = () => expect.getState().currentTestName || 'test'
30
30
 
31
31
  let storages: StorageProvider[]
@@ -63,7 +63,14 @@ dotenv.config()
63
63
 
64
64
  const localMySqlConnection = process.env.MYSQL_CONNECTION || ''
65
65
 
66
- export interface TuEnv {
66
+ export interface TuEnvFlags {
67
+ chain: sdk.Chain
68
+ runMySQL: boolean
69
+ runSlowTests: boolean
70
+ logTests: boolean
71
+ }
72
+
73
+ export interface TuEnv extends TuEnvFlags {
67
74
  chain: sdk.Chain
68
75
  identityKey: string
69
76
  identityKey2: string
@@ -71,9 +78,6 @@ export interface TuEnv {
71
78
  bitailsApiKey: string
72
79
  whatsonchainApiKey: string
73
80
  devKeys: Record<string, string>
74
- runMySQL: boolean
75
- runSlowTests: boolean
76
- logTests: boolean
77
81
  /**
78
82
  * file path to local sqlite file for identityKey
79
83
  */
@@ -92,11 +96,11 @@ export interface TuEnv {
92
96
  export abstract class TestUtilsWalletStorage {
93
97
  /**
94
98
  * @param chain
95
- * @returns true if .env is not valid for chain
99
+ * @returns true if .env has truthy idenityKey, idenityKey2 values for chain
96
100
  */
97
101
  static noEnv(chain: sdk.Chain): boolean {
98
102
  try {
99
- _tu.getEnv(chain)
103
+ Setup.getEnv(chain)
100
104
  return false
101
105
  } catch {
102
106
  return true
@@ -116,7 +120,20 @@ export abstract class TestUtilsWalletStorage {
116
120
  }
117
121
  }
118
122
 
123
+ static getEnvFlags(chain: sdk.Chain): TuEnvFlags {
124
+ const logTests = !!process.env.LOGTESTS
125
+ const runMySQL = !!process.env.RUNMYSQL
126
+ const runSlowTests = !!process.env.RUNSLOWTESTS
127
+ return {
128
+ chain,
129
+ runMySQL,
130
+ runSlowTests,
131
+ logTests
132
+ }
133
+ }
134
+
119
135
  static getEnv(chain: sdk.Chain): TuEnv {
136
+ const flagsEnv = _tu.getEnvFlags(chain)
120
137
  // Identity keys of the lead maintainer of this repo...
121
138
  const identityKey = (chain === 'main' ? process.env.MY_MAIN_IDENTITY : process.env.MY_TEST_IDENTITY) || ''
122
139
  const filePath = chain === 'main' ? process.env.MY_MAIN_FILEPATH : process.env.MY_TEST_FILEPATH
@@ -126,24 +143,18 @@ export abstract class TestUtilsWalletStorage {
126
143
  const cloudMySQLConnection =
127
144
  chain === 'main' ? process.env.MAIN_CLOUD_MYSQL_CONNECTION : process.env.TEST_CLOUD_MYSQL_CONNECTION
128
145
  const DEV_KEYS = process.env.DEV_KEYS || '{}'
129
- const logTests = !!process.env.LOGTESTS
130
- const runMySQL = !!process.env.RUNMYSQL
131
- const runSlowTests = !!process.env.RUNSLOWTESTS
132
146
  const taalApiKey = (chain === 'main' ? process.env.MAIN_TAAL_API_KEY : process.env.TEST_TAAL_API_KEY) || ''
133
147
  const bitailsApiKey = (chain === 'main' ? process.env.MAIN_BITAILS_API_KEY : process.env.TEST_BITAILS_API_KEY) || ''
134
148
  const whatsonchainApiKey =
135
149
  (chain === 'main' ? process.env.MAIN_WHATSONCHAIN_API_KEY : process.env.TEST_WHATSONCHAIN_API_KEY) || ''
136
150
  return {
137
- chain,
151
+ ...flagsEnv,
138
152
  identityKey,
139
153
  identityKey2,
140
154
  taalApiKey,
141
155
  bitailsApiKey,
142
156
  whatsonchainApiKey,
143
157
  devKeys: JSON.parse(DEV_KEYS) as Record<string, string>,
144
- runMySQL,
145
- runSlowTests,
146
- logTests,
147
158
  filePath,
148
159
  testIdentityKey,
149
160
  testFilePath,
@@ -5,7 +5,7 @@ import { _tu, expectToThrowWERR, TestWalletNoSetup } from '../../utils/TestUtils
5
5
  describe('internalizeAction tests', () => {
6
6
  jest.setTimeout(99999999)
7
7
 
8
- const env = _tu.getEnv('test')
8
+ const env = _tu.getEnvFlags('test')
9
9
 
10
10
  const gctxs: TestWalletNoSetup[] = []
11
11
  const useSharedCtxs = true
@@ -2,7 +2,7 @@ import * as bsv from '@bsv/sdk'
2
2
  import { sdk, StorageProvider } from '../../../src/index.client'
3
3
  import { _tu, expectToThrowWERR, MockData, TestWalletNoSetup } from '../../utils/TestUtilsWalletStorage'
4
4
 
5
- const env = _tu.getEnv('test')
5
+ const env = _tu.getEnvFlags('test')
6
6
  const testName = () => expect.getState().currentTestName || 'test'
7
7
 
8
8
  describe('listActions2 single action tests', () => {
@@ -5,7 +5,7 @@ import { _tu, logger, TestWalletNoSetup } from '../../utils/TestUtilsWalletStora
5
5
  describe('Wallet sync tests', () => {
6
6
  jest.setTimeout(99999999)
7
7
 
8
- const env = _tu.getEnv('test')
8
+ const env = _tu.getEnvFlags('test')
9
9
 
10
10
  beforeAll(async () => {})
11
11
 
@@ -1,66 +0,0 @@
1
- import { Base64String, Certificate as BsvCertificate, CertificateFieldNameUnder50Bytes, GetPublicKeyArgs, GetPublicKeyResult, OriginatorDomainNameStringUnder250Bytes, PubKeyHex, WalletCertificate, WalletDecryptArgs, WalletDecryptResult, WalletEncryptArgs, WalletEncryptResult, WalletProtocol } from '@bsv/sdk';
2
- export interface CertOpsWallet {
3
- getPublicKey(args: GetPublicKeyArgs, originator?: OriginatorDomainNameStringUnder250Bytes): Promise<GetPublicKeyResult>;
4
- encrypt(args: WalletEncryptArgs, originator?: OriginatorDomainNameStringUnder250Bytes): Promise<WalletEncryptResult>;
5
- decrypt(args: WalletDecryptArgs, originator?: OriginatorDomainNameStringUnder250Bytes): Promise<WalletDecryptResult>;
6
- }
7
- export declare class CertOps extends BsvCertificate {
8
- wallet: CertOpsWallet;
9
- _keyring?: Record<CertificateFieldNameUnder50Bytes, string>;
10
- _encryptedFields?: Record<CertificateFieldNameUnder50Bytes, Base64String>;
11
- _decryptedFields?: Record<CertificateFieldNameUnder50Bytes, string>;
12
- constructor(wallet: CertOpsWallet, wc: WalletCertificate);
13
- static fromCounterparty(wallet: CertOpsWallet, e: {
14
- certificate: WalletCertificate;
15
- keyring: Record<CertificateFieldNameUnder50Bytes, string>;
16
- counterparty: PubKeyHex;
17
- }): Promise<CertOps>;
18
- static fromCertifier(wallet: CertOpsWallet, e: {
19
- certificate: WalletCertificate;
20
- keyring: Record<CertificateFieldNameUnder50Bytes, string>;
21
- }): Promise<CertOps>;
22
- static fromEncrypted(wallet: CertOpsWallet, wc: WalletCertificate, keyring: Record<CertificateFieldNameUnder50Bytes, string>): Promise<CertOps>;
23
- static fromDecrypted(wallet: CertOpsWallet, wc: WalletCertificate): Promise<CertOps>;
24
- static copyFields<T>(fields: Record<CertificateFieldNameUnder50Bytes, T>): Record<CertificateFieldNameUnder50Bytes, T>;
25
- static getProtocolForCertificateFieldEncryption(serialNumber: string, fieldName: string): {
26
- protocolID: WalletProtocol;
27
- keyID: string;
28
- };
29
- exportForSubject(): {
30
- certificate: WalletCertificate;
31
- keyring: Record<CertificateFieldNameUnder50Bytes, string>;
32
- };
33
- toWalletCertificate(): WalletCertificate;
34
- encryptFields(counterparty?: 'self' | PubKeyHex): Promise<{
35
- fields: Record<CertificateFieldNameUnder50Bytes, string>;
36
- keyring: Record<CertificateFieldNameUnder50Bytes, string>;
37
- }>;
38
- decryptFields(counterparty?: PubKeyHex, keyring?: Record<CertificateFieldNameUnder50Bytes, string>): Promise<Record<CertificateFieldNameUnder50Bytes, string>>;
39
- exportForCounterparty(
40
- /** The incoming counterparty is who they are to us. */
41
- counterparty: PubKeyHex, fieldsToReveal: CertificateFieldNameUnder50Bytes[]): Promise<{
42
- certificate: WalletCertificate;
43
- keyring: Record<CertificateFieldNameUnder50Bytes, string>;
44
- counterparty: PubKeyHex;
45
- }>;
46
- /**
47
- * Creates a verifiable certificate structure for a specific verifier, allowing them access to specified fields.
48
- * This method decrypts the master field keys for each field specified in `fieldsToReveal` and re-encrypts them
49
- * for the verifier's identity key. The resulting certificate structure includes only the fields intended to be
50
- * revealed and a verifier-specific keyring for field decryption.
51
- *
52
- * @param {PubKeyHex} verifierIdentityKey - The public identity key of the verifier who will receive access to the specified fields.
53
- * @param {CertificateFieldNameUnder50Bytes[]} fieldsToReveal - An array of field names to be revealed to the verifier. Must be a subset of the certificate's fields.
54
- * @returns {Promise<Record<CertificateFieldNameUnder50Bytes[], Base64String>} - A new certificate structure containing the original encrypted fields, the verifier-specific field decryption keyring, and essential certificate metadata.
55
- * @throws {WERR_INVALID_PARAMETER} Throws an error if:
56
- * - fieldsToReveal is empty or a field in `fieldsToReveal` does not exist in the certificate.
57
- * - The decrypted master field key fails to decrypt the corresponding field (indicating an invalid key).
58
- */
59
- createKeyringForVerifier(verifierIdentityKey: PubKeyHex, fieldsToReveal: CertificateFieldNameUnder50Bytes[]): Promise<Record<CertificateFieldNameUnder50Bytes, Base64String>>;
60
- /**
61
- * encrypt plaintext field values for the subject
62
- * update the signature using the certifier's private key.
63
- */
64
- encryptAndSignNewCertificate(): Promise<void>;
65
- }
66
- //# sourceMappingURL=CertOps.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CertOps.d.ts","sourceRoot":"","sources":["../../../src/sdk/CertOps.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,WAAW,IAAI,cAAc,EAC7B,gCAAgC,EAChC,gBAAgB,EAChB,kBAAkB,EAClB,uCAAuC,EACvC,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EAEnB,cAAc,EACf,MAAM,UAAU,CAAA;AAKjB,MAAM,WAAW,aAAa;IAC5B,YAAY,CACV,IAAI,EAAE,gBAAgB,EACtB,UAAU,CAAC,EAAE,uCAAuC,GACnD,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAC9B,OAAO,CAAC,IAAI,EAAE,iBAAiB,EAAE,UAAU,CAAC,EAAE,uCAAuC,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;IACpH,OAAO,CAAC,IAAI,EAAE,iBAAiB,EAAE,UAAU,CAAC,EAAE,uCAAuC,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;CACrH;AAED,qBAAa,OAAQ,SAAQ,cAAc;IAMhC,MAAM,EAAE,aAAa;IAL9B,QAAQ,CAAC,EAAE,MAAM,CAAC,gCAAgC,EAAE,MAAM,CAAC,CAAA;IAC3D,gBAAgB,CAAC,EAAE,MAAM,CAAC,gCAAgC,EAAE,YAAY,CAAC,CAAA;IACzE,gBAAgB,CAAC,EAAE,MAAM,CAAC,gCAAgC,EAAE,MAAM,CAAC,CAAA;gBAG1D,MAAM,EAAE,aAAa,EAC5B,EAAE,EAAE,iBAAiB;WAKV,gBAAgB,CAC3B,MAAM,EAAE,aAAa,EACrB,CAAC,EAAE;QACD,WAAW,EAAE,iBAAiB,CAAA;QAC9B,OAAO,EAAE,MAAM,CAAC,gCAAgC,EAAE,MAAM,CAAC,CAAA;QACzD,YAAY,EAAE,SAAS,CAAA;KACxB,GACA,OAAO,CAAC,OAAO,CAAC;WAUN,aAAa,CACxB,MAAM,EAAE,aAAa,EACrB,CAAC,EAAE;QACD,WAAW,EAAE,iBAAiB,CAAA;QAC9B,OAAO,EAAE,MAAM,CAAC,gCAAgC,EAAE,MAAM,CAAC,CAAA;KAC1D,GACA,OAAO,CAAC,OAAO,CAAC;WAON,aAAa,CACxB,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,iBAAiB,EACrB,OAAO,EAAE,MAAM,CAAC,gCAAgC,EAAE,MAAM,CAAC,GACxD,OAAO,CAAC,OAAO,CAAC;WASN,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAO1F,MAAM,CAAC,UAAU,CAAC,CAAC,EACjB,MAAM,EAAE,MAAM,CAAC,gCAAgC,EAAE,CAAC,CAAC,GAClD,MAAM,CAAC,gCAAgC,EAAE,CAAC,CAAC;IAM9C,MAAM,CAAC,wCAAwC,CAC7C,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB;QAAE,UAAU,EAAE,cAAc,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAOhD,gBAAgB,IAAI;QAClB,WAAW,EAAE,iBAAiB,CAAA;QAC9B,OAAO,EAAE,MAAM,CAAC,gCAAgC,EAAE,MAAM,CAAC,CAAA;KAC1D;IAQD,mBAAmB,IAAI,iBAAiB;IAQlC,aAAa,CAAC,YAAY,GAAE,MAAM,GAAG,SAAkB,GAAG,OAAO,CAAC;QACtE,MAAM,EAAE,MAAM,CAAC,gCAAgC,EAAE,MAAM,CAAC,CAAA;QACxD,OAAO,EAAE,MAAM,CAAC,gCAAgC,EAAE,MAAM,CAAC,CAAA;KAC1D,CAAC;IAuBI,aAAa,CACjB,YAAY,CAAC,EAAE,SAAS,EACxB,OAAO,CAAC,EAAE,MAAM,CAAC,gCAAgC,EAAE,MAAM,CAAC,GACzD,OAAO,CAAC,MAAM,CAAC,gCAAgC,EAAE,MAAM,CAAC,CAAC;IA2BtD,qBAAqB;IACzB,uDAAuD;IACvD,YAAY,EAAE,SAAS,EACvB,cAAc,EAAE,gCAAgC,EAAE,GACjD,OAAO,CAAC;QACT,WAAW,EAAE,iBAAiB,CAAA;QAC9B,OAAO,EAAE,MAAM,CAAC,gCAAgC,EAAE,MAAM,CAAC,CAAA;QACzD,YAAY,EAAE,SAAS,CAAA;KACxB,CAAC;IAaF;;;;;;;;;;;;OAYG;IACG,wBAAwB,CAC5B,mBAAmB,EAAE,SAAS,EAC9B,cAAc,EAAE,gCAAgC,EAAE,GACjD,OAAO,CAAC,MAAM,CAAC,gCAAgC,EAAE,YAAY,CAAC,CAAC;IAuClE;;;OAGG;IACG,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC;CASpD"}
@@ -1,190 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CertOps = void 0;
4
- const sdk_1 = require("@bsv/sdk");
5
- const index_client_1 = require("../index.client");
6
- const sdk_2 = require("@bsv/sdk");
7
- const WERR_errors_1 = require("./WERR_errors");
8
- class CertOps extends sdk_1.Certificate {
9
- constructor(wallet, wc) {
10
- super(wc.type, wc.serialNumber, wc.subject, wc.certifier, wc.revocationOutpoint, wc.fields, wc.signature);
11
- this.wallet = wallet;
12
- }
13
- static async fromCounterparty(wallet, e) {
14
- const c = new CertOps(wallet, e.certificate);
15
- // confirm cert verifies and decrypts.
16
- await c.verify();
17
- await c.decryptFields(e.counterparty, e.keyring);
18
- // un-decrypt
19
- c.fields = c._encryptedFields;
20
- return c;
21
- }
22
- static async fromCertifier(wallet, e) {
23
- return await CertOps.fromCounterparty(wallet, {
24
- counterparty: e.certificate.certifier,
25
- ...e
26
- });
27
- }
28
- static async fromEncrypted(wallet, wc, keyring) {
29
- const c = new CertOps(wallet, wc);
30
- c._keyring = keyring;
31
- c._encryptedFields = this.copyFields(c.fields);
32
- c._decryptedFields = await c.decryptFields();
33
- await c.verify();
34
- return c;
35
- }
36
- static async fromDecrypted(wallet, wc) {
37
- const c = new CertOps(wallet, wc);
38
- ({ fields: c._encryptedFields, keyring: c._keyring } = await c.encryptFields());
39
- c._decryptedFields = await c.decryptFields();
40
- return c;
41
- }
42
- static copyFields(fields) {
43
- const copy = {};
44
- for (const [n, v] of Object.entries(fields))
45
- copy[n] = v;
46
- return copy;
47
- }
48
- static getProtocolForCertificateFieldEncryption(serialNumber, fieldName) {
49
- return {
50
- protocolID: [2, 'certificate field encryption'],
51
- keyID: `${serialNumber} ${fieldName}`
52
- };
53
- }
54
- exportForSubject() {
55
- if (!this._keyring || !this._encryptedFields || !this.signature || this.signature.length === 0)
56
- throw new WERR_errors_1.WERR_INVALID_OPERATION(`Certificate must be encrypted and signed prior to export.`);
57
- const certificate = this.toWalletCertificate();
58
- const keyring = this._keyring;
59
- return { certificate, keyring };
60
- }
61
- toWalletCertificate() {
62
- const wc = {
63
- signature: '',
64
- ...this
65
- };
66
- return wc;
67
- }
68
- async encryptFields(counterparty = 'self') {
69
- const fields = this._decryptedFields || this.fields;
70
- const encryptedFields = {};
71
- const keyring = {};
72
- for (const fieldName of Object.keys(fields)) {
73
- const fieldSymmetricKey = sdk_2.SymmetricKey.fromRandom();
74
- const encryptedFieldValue = fieldSymmetricKey.encrypt(sdk_2.Utils.toArray(this.fields[fieldName], 'utf8'));
75
- encryptedFields[fieldName] = sdk_2.Utils.toBase64(encryptedFieldValue);
76
- const encryptedFieldKey = await this.wallet.encrypt({
77
- plaintext: fieldSymmetricKey.toArray(),
78
- counterparty,
79
- ...CertOps.getProtocolForCertificateFieldEncryption(this.serialNumber, fieldName)
80
- });
81
- keyring[fieldName] = sdk_2.Utils.toBase64(encryptedFieldKey.ciphertext);
82
- }
83
- this._keyring = keyring;
84
- this._decryptedFields = fields;
85
- this.fields = this._encryptedFields = encryptedFields;
86
- return { fields: encryptedFields, keyring };
87
- }
88
- async decryptFields(counterparty, keyring) {
89
- keyring || (keyring = this._keyring);
90
- const fields = this._encryptedFields || this.fields;
91
- const decryptedFields = {};
92
- if (!keyring)
93
- throw new index_client_1.sdk.WERR_INVALID_PARAMETER('keyring', 'valid');
94
- try {
95
- for (const fieldName of Object.keys(keyring)) {
96
- const { plaintext: fieldRevelationKey } = await this.wallet.decrypt({
97
- ciphertext: sdk_2.Utils.toArray(keyring[fieldName], 'base64'),
98
- counterparty: counterparty || this.subject,
99
- ...CertOps.getProtocolForCertificateFieldEncryption(this.serialNumber, fieldName)
100
- });
101
- const fieldValue = new sdk_2.SymmetricKey(fieldRevelationKey).decrypt(sdk_2.Utils.toArray(fields[fieldName], 'base64'));
102
- decryptedFields[fieldName] = sdk_2.Utils.toUTF8(fieldValue);
103
- }
104
- this._keyring = keyring;
105
- this._encryptedFields = fields;
106
- this.fields = this._decryptedFields = decryptedFields;
107
- return decryptedFields;
108
- }
109
- catch (eu) {
110
- const e = index_client_1.sdk.WalletError.fromUnknown(eu);
111
- throw e;
112
- }
113
- }
114
- async exportForCounterparty(
115
- /** The incoming counterparty is who they are to us. */
116
- counterparty, fieldsToReveal) {
117
- if (!this._keyring || !this._encryptedFields || !this.signature || this.signature.length === 0)
118
- throw new WERR_errors_1.WERR_INVALID_OPERATION(`Certificate must be encrypted and signed prior to export.`);
119
- const certificate = this.toWalletCertificate();
120
- const keyring = await this.createKeyringForVerifier(counterparty, fieldsToReveal);
121
- // The exported counterparty is who we are to them...
122
- return {
123
- certificate,
124
- keyring,
125
- counterparty: await (0, index_client_1.getIdentityKey)(this.wallet)
126
- };
127
- }
128
- /**
129
- * Creates a verifiable certificate structure for a specific verifier, allowing them access to specified fields.
130
- * This method decrypts the master field keys for each field specified in `fieldsToReveal` and re-encrypts them
131
- * for the verifier's identity key. The resulting certificate structure includes only the fields intended to be
132
- * revealed and a verifier-specific keyring for field decryption.
133
- *
134
- * @param {PubKeyHex} verifierIdentityKey - The public identity key of the verifier who will receive access to the specified fields.
135
- * @param {CertificateFieldNameUnder50Bytes[]} fieldsToReveal - An array of field names to be revealed to the verifier. Must be a subset of the certificate's fields.
136
- * @returns {Promise<Record<CertificateFieldNameUnder50Bytes[], Base64String>} - A new certificate structure containing the original encrypted fields, the verifier-specific field decryption keyring, and essential certificate metadata.
137
- * @throws {WERR_INVALID_PARAMETER} Throws an error if:
138
- * - fieldsToReveal is empty or a field in `fieldsToReveal` does not exist in the certificate.
139
- * - The decrypted master field key fails to decrypt the corresponding field (indicating an invalid key).
140
- */
141
- async createKeyringForVerifier(verifierIdentityKey, fieldsToReveal) {
142
- if (!this._keyring || !this._encryptedFields)
143
- throw new index_client_1.sdk.WERR_INVALID_OPERATION(`certificate must be encrypted`);
144
- if (!Array.isArray(fieldsToReveal) || fieldsToReveal.some(n => this._encryptedFields[n] === undefined))
145
- throw new index_client_1.sdk.WERR_INVALID_PARAMETER('fieldsToReveal', `an array of certificate field names`);
146
- const fieldRevelationKeyring = {};
147
- for (const fieldName of fieldsToReveal) {
148
- // Create a keyID
149
- const encryptedFieldKey = this._keyring[fieldName];
150
- const protocol = CertOps.getProtocolForCertificateFieldEncryption(this.serialNumber, fieldName);
151
- // Decrypt the master field key
152
- const { plaintext: fieldKey } = await this.wallet.decrypt({
153
- ciphertext: sdk_2.Utils.toArray(encryptedFieldKey, 'base64'),
154
- counterparty: this.certifier,
155
- ...protocol
156
- });
157
- // Verify that derived key actually decrypts requested field
158
- try {
159
- new sdk_2.SymmetricKey(fieldKey).decrypt(sdk_2.Utils.toArray(this.fields[fieldName], 'base64'));
160
- }
161
- catch (_) {
162
- throw new index_client_1.sdk.WERR_INTERNAL(`unable to decrypt field "${fieldName}" using derived field key.`);
163
- }
164
- // Encrypt derived fieldRevelationKey for verifier
165
- const { ciphertext: encryptedFieldRevelationKey } = await this.wallet.encrypt({
166
- plaintext: fieldKey,
167
- counterparty: verifierIdentityKey,
168
- ...protocol
169
- });
170
- // Add encryptedFieldRevelationKey to fieldRevelationKeyring
171
- fieldRevelationKeyring[fieldName] = sdk_2.Utils.toBase64(encryptedFieldRevelationKey);
172
- }
173
- // Return the field revelation keyring which can be used to create a verifiable certificate for a verifier.
174
- return fieldRevelationKeyring;
175
- }
176
- /**
177
- * encrypt plaintext field values for the subject
178
- * update the signature using the certifier's private key.
179
- */
180
- async encryptAndSignNewCertificate() {
181
- if ((await (0, index_client_1.getIdentityKey)(this.wallet)) !== this.certifier)
182
- throw new index_client_1.sdk.WERR_INVALID_PARAMETER('wallet', 'the certifier for new certificate issuance.');
183
- await this.encryptFields(this.subject);
184
- await this.sign(this.wallet);
185
- // Confirm the signed certificate verifies:
186
- await this.verify();
187
- }
188
- }
189
- exports.CertOps = CertOps;
190
- //# sourceMappingURL=CertOps.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CertOps.js","sourceRoot":"","sources":["../../../src/sdk/CertOps.ts"],"names":[],"mappings":"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"}