@veilo/sdk-core 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +15 -0
- package/README.md +449 -1243
- package/accounts.d.ts +2 -0
- package/accounts.js +3 -0
- package/cloak.d.ts +2 -0
- package/cloak.js +3 -0
- package/config.d.ts +2 -2
- package/config.js +2 -3
- package/dist/cjs/accounts/admin.d.ts +84 -0
- package/dist/cjs/accounts/admin.js +208 -0
- package/dist/cjs/accounts/errors.d.ts +6 -0
- package/dist/cjs/accounts/errors.js +98 -0
- package/dist/cjs/accounts/index.d.ts +4 -0
- package/dist/cjs/accounts/index.js +20 -0
- package/dist/cjs/accounts/pdas.d.ts +23 -0
- package/dist/cjs/accounts/pdas.js +44 -0
- package/dist/cjs/accounts/queries.d.ts +41 -0
- package/dist/cjs/accounts/queries.js +95 -0
- package/dist/cjs/client.d.ts +2 -407
- package/dist/cjs/client.js +6 -938
- package/dist/cjs/cloak/client.d.ts +28 -0
- package/dist/cjs/cloak/client.js +68 -0
- package/dist/cjs/cloak/errors.d.ts +13 -0
- package/dist/cjs/cloak/errors.js +25 -0
- package/dist/cjs/cloak/helpers.d.ts +6 -0
- package/dist/cjs/cloak/helpers.js +35 -0
- package/dist/cjs/cloak/index.d.ts +6 -0
- package/dist/cjs/cloak/index.js +24 -0
- package/dist/cjs/cloak/polling.d.ts +7 -0
- package/dist/cjs/cloak/polling.js +66 -0
- package/dist/cjs/cloak/transport.d.ts +15 -0
- package/dist/cjs/cloak/transport.js +119 -0
- package/dist/cjs/cloak/types.d.ts +188 -0
- package/dist/cjs/cloak/types.js +5 -0
- package/dist/cjs/cloak.d.ts +1 -0
- package/dist/cjs/cloak.js +18 -0
- package/dist/cjs/compactNote.d.ts +21 -0
- package/dist/cjs/compactNote.js +31 -7
- package/dist/cjs/events/index.d.ts +6 -0
- package/dist/cjs/events/index.js +22 -0
- package/dist/cjs/events/parsing.d.ts +25 -0
- package/dist/cjs/events/parsing.js +158 -0
- package/dist/cjs/events/position.d.ts +26 -0
- package/dist/cjs/events/position.js +53 -0
- package/dist/cjs/events/recovery.d.ts +87 -0
- package/dist/cjs/events/recovery.js +281 -0
- package/dist/cjs/events/scanning.d.ts +35 -0
- package/dist/cjs/events/scanning.js +98 -0
- package/dist/cjs/events/tree.d.ts +27 -0
- package/dist/cjs/events/tree.js +63 -0
- package/dist/cjs/events/types.d.ts +39 -0
- package/dist/cjs/events.d.ts +1 -77
- package/dist/cjs/events.js +6 -154
- package/dist/cjs/identity/encoding.d.ts +9 -0
- package/dist/cjs/identity/encoding.js +85 -0
- package/dist/cjs/identity/index.d.ts +4 -0
- package/dist/cjs/identity/index.js +20 -0
- package/dist/cjs/identity/noteKey.d.ts +33 -0
- package/dist/cjs/identity/noteKey.js +97 -0
- package/dist/cjs/identity/spending.d.ts +18 -0
- package/dist/cjs/identity/spending.js +46 -0
- package/dist/cjs/identity/viewKey.d.ts +38 -0
- package/dist/cjs/identity/viewKey.js +105 -0
- package/dist/cjs/idl/index.d.ts +18 -0
- package/dist/cjs/idl/index.js +24 -0
- package/dist/cjs/idl/privacy_pool.json +9907 -9907
- package/dist/cjs/idl/privacy_pool_legacy.js +3307 -0
- package/dist/cjs/idl/privacy_pool_legacy.json +2302 -0
- package/dist/cjs/idl/privacy_pool_legacy2.d.ts +5 -0
- package/dist/cjs/idl/privacy_pool_legacy2.js +3397 -0
- package/dist/cjs/idl/privacy_pool_legacy2.json +2376 -0
- package/dist/cjs/index.d.ts +9 -3
- package/dist/cjs/index.js +15 -2
- package/dist/cjs/notes/amount.d.ts +2 -0
- package/dist/cjs/notes/amount.js +21 -0
- package/dist/cjs/notes/encryption.d.ts +41 -0
- package/dist/cjs/notes/encryption.js +75 -0
- package/dist/cjs/notes/index.d.ts +8 -0
- package/dist/cjs/notes/index.js +24 -0
- package/dist/cjs/notes/mailbox.d.ts +70 -0
- package/dist/cjs/notes/mailbox.js +164 -0
- package/dist/cjs/notes/model.d.ts +91 -0
- package/dist/cjs/notes/model.js +109 -0
- package/dist/cjs/notes/nullifier.d.ts +27 -0
- package/dist/cjs/notes/nullifier.js +45 -0
- package/dist/cjs/notes/recovery.d.ts +20 -0
- package/dist/cjs/notes/recovery.js +48 -0
- package/dist/cjs/notes/selection.d.ts +77 -0
- package/dist/cjs/notes/selection.js +193 -0
- package/dist/cjs/notes/spent.d.ts +60 -0
- package/dist/cjs/notes/spent.js +101 -0
- package/dist/cjs/perps/constants.d.ts +16 -0
- package/dist/cjs/perps/constants.js +52 -0
- package/dist/cjs/perps/index.d.ts +5 -0
- package/dist/cjs/perps/index.js +21 -0
- package/dist/cjs/perps/keys.d.ts +16 -0
- package/dist/cjs/perps/keys.js +43 -0
- package/dist/cjs/perps/pdas.d.ts +29 -0
- package/dist/cjs/perps/pdas.js +55 -0
- package/dist/cjs/perps/relayer.d.ts +9 -0
- package/dist/cjs/perps/relayer.js +35 -0
- package/dist/cjs/perps/types.d.ts +126 -0
- package/dist/cjs/perps/types.js +2 -0
- package/dist/cjs/positions/index.d.ts +4 -0
- package/dist/cjs/positions/index.js +20 -0
- package/dist/cjs/positions/keys.d.ts +29 -0
- package/dist/cjs/positions/keys.js +71 -0
- package/dist/cjs/positions/pdas.d.ts +15 -0
- package/dist/cjs/positions/pdas.js +54 -0
- package/dist/cjs/positions/relayer.d.ts +4 -0
- package/dist/cjs/positions/relayer.js +15 -0
- package/dist/cjs/positions/types.d.ts +97 -0
- package/dist/cjs/positions/types.js +2 -0
- package/dist/cjs/predictions/client.d.ts +41 -0
- package/dist/cjs/predictions/client.js +147 -0
- package/dist/cjs/predictions/index.d.ts +5 -0
- package/dist/cjs/predictions/index.js +21 -0
- package/dist/cjs/predictions/keys.d.ts +14 -0
- package/dist/cjs/predictions/keys.js +40 -0
- package/dist/cjs/predictions/pdas.d.ts +6 -0
- package/dist/cjs/predictions/pdas.js +13 -0
- package/dist/cjs/predictions/relayer.d.ts +3 -0
- package/dist/cjs/predictions/relayer.js +11 -0
- package/dist/cjs/predictions/types.d.ts +178 -0
- package/dist/cjs/predictions/types.js +2 -0
- package/dist/cjs/program.d.ts +2 -0
- package/dist/cjs/program.js +8 -7
- package/dist/cjs/proof.d.ts +1 -183
- package/dist/cjs/proof.js +16 -290
- package/dist/cjs/proofs/encoding.d.ts +17 -0
- package/dist/cjs/proofs/encoding.js +72 -0
- package/dist/cjs/proofs/formatting.d.ts +6 -0
- package/dist/cjs/proofs/formatting.js +34 -0
- package/dist/cjs/proofs/index.d.ts +5 -0
- package/dist/cjs/proofs/index.js +21 -0
- package/dist/cjs/proofs/swap.d.ts +87 -0
- package/dist/cjs/proofs/swap.js +144 -0
- package/dist/cjs/proofs/transaction.d.ts +28 -0
- package/dist/cjs/proofs/transaction.js +110 -0
- package/dist/cjs/proofs/types.d.ts +70 -0
- package/dist/cjs/proofs/types.js +2 -0
- package/dist/cjs/prover.d.ts +30 -4
- package/dist/cjs/prover.js +118 -49
- package/dist/cjs/relayer/api.d.ts +31 -0
- package/dist/cjs/relayer/api.js +86 -0
- package/dist/cjs/relayer/client.d.ts +73 -0
- package/dist/cjs/relayer/client.js +206 -0
- package/dist/cjs/relayer/crypto.d.ts +5 -0
- package/dist/cjs/relayer/crypto.js +26 -0
- package/dist/cjs/relayer/encoding.d.ts +2 -0
- package/dist/cjs/relayer/encoding.js +23 -0
- package/dist/cjs/relayer/errors.d.ts +7 -0
- package/dist/cjs/relayer/errors.js +17 -0
- package/dist/cjs/relayer/index.d.ts +6 -0
- package/dist/cjs/relayer/index.js +19 -0
- package/dist/cjs/relayer/internal-config.d.ts +36 -0
- package/dist/cjs/relayer/internal-config.js +9 -0
- package/dist/cjs/relayer/internal.d.ts +6 -0
- package/dist/cjs/relayer/internal.js +14 -0
- package/dist/cjs/relayer/transport.d.ts +19 -0
- package/dist/cjs/relayer/transport.js +68 -0
- package/dist/{src/relayer.d.ts → cjs/relayer/types.d.ts} +53 -96
- package/dist/cjs/relayer/types.js +5 -0
- package/dist/cjs/relayer.d.ts +1 -318
- package/dist/cjs/relayer.js +15 -254
- package/dist/cjs/shield/alt.js +8 -8
- package/dist/cjs/shield/errors.js +2 -2
- package/dist/cjs/shield/finalize.js +2 -2
- package/dist/cjs/shield/ix.d.ts +1 -1
- package/dist/cjs/shield/owner.js +9 -11
- package/dist/cjs/shield/ports.js +3 -3
- package/dist/cjs/shield/preflight.js +3 -3
- package/dist/cjs/shield/shield.js +20 -19
- package/dist/cjs/shield/types.d.ts +1 -1
- package/dist/cjs/transactions/deposit.d.ts +94 -0
- package/dist/cjs/transactions/deposit.js +234 -0
- package/dist/cjs/transactions/index.d.ts +7 -0
- package/dist/cjs/transactions/index.js +26 -0
- package/dist/cjs/transactions/swap.d.ts +71 -0
- package/dist/cjs/transactions/swap.js +184 -0
- package/dist/cjs/transactions/transact.d.ts +34 -0
- package/dist/cjs/transactions/transact.js +146 -0
- package/dist/cjs/transactions/transfer.d.ts +51 -0
- package/dist/cjs/transactions/transfer.js +106 -0
- package/dist/cjs/transactions/withdraw.d.ts +52 -0
- package/dist/cjs/transactions/withdraw.js +104 -0
- package/dist/cjs/utxo.d.ts +1 -235
- package/dist/cjs/utxo.js +15 -404
- package/dist/esm/accounts/admin.d.ts +84 -0
- package/dist/esm/accounts/admin.js +165 -0
- package/dist/esm/accounts/errors.d.ts +6 -0
- package/dist/esm/accounts/errors.js +95 -0
- package/dist/esm/accounts/index.d.ts +4 -0
- package/dist/esm/accounts/index.js +4 -0
- package/dist/esm/accounts/pdas.d.ts +23 -0
- package/dist/esm/accounts/pdas.js +38 -0
- package/dist/esm/accounts/queries.d.ts +41 -0
- package/dist/esm/accounts/queries.js +88 -0
- package/dist/esm/client.d.ts +2 -407
- package/dist/esm/client.js +3 -891
- package/dist/esm/cloak/client.d.ts +28 -0
- package/dist/esm/cloak/client.js +64 -0
- package/dist/esm/cloak/errors.d.ts +13 -0
- package/dist/esm/cloak/errors.js +21 -0
- package/dist/esm/cloak/helpers.d.ts +6 -0
- package/dist/esm/cloak/helpers.js +31 -0
- package/dist/esm/cloak/index.d.ts +6 -0
- package/dist/esm/cloak/index.js +6 -0
- package/dist/esm/cloak/polling.d.ts +7 -0
- package/dist/esm/cloak/polling.js +63 -0
- package/dist/esm/cloak/transport.d.ts +15 -0
- package/dist/esm/cloak/transport.js +115 -0
- package/dist/esm/cloak/types.d.ts +188 -0
- package/dist/esm/cloak/types.js +4 -0
- package/dist/esm/cloak.d.ts +1 -0
- package/dist/esm/cloak.js +2 -0
- package/dist/esm/compactNote.d.ts +21 -0
- package/dist/esm/compactNote.js +24 -1
- package/dist/esm/events/index.d.ts +6 -0
- package/dist/esm/events/index.js +6 -0
- package/dist/esm/events/parsing.d.ts +25 -0
- package/dist/esm/events/parsing.js +120 -0
- package/dist/esm/events/position.d.ts +26 -0
- package/dist/esm/events/position.js +48 -0
- package/dist/esm/events/recovery.d.ts +87 -0
- package/dist/esm/events/recovery.js +237 -0
- package/dist/esm/events/scanning.d.ts +35 -0
- package/dist/esm/events/scanning.js +92 -0
- package/dist/esm/events/tree.d.ts +27 -0
- package/dist/esm/events/tree.js +58 -0
- package/dist/esm/events/types.d.ts +39 -0
- package/dist/esm/events/types.js +1 -0
- package/dist/esm/events.d.ts +1 -77
- package/dist/esm/events.js +3 -129
- package/dist/esm/identity/encoding.d.ts +9 -0
- package/dist/esm/identity/encoding.js +75 -0
- package/dist/esm/identity/index.d.ts +4 -0
- package/dist/esm/identity/index.js +4 -0
- package/dist/esm/identity/noteKey.d.ts +33 -0
- package/dist/esm/identity/noteKey.js +91 -0
- package/dist/esm/identity/spending.d.ts +18 -0
- package/dist/esm/identity/spending.js +35 -0
- package/dist/esm/identity/viewKey.d.ts +38 -0
- package/dist/esm/identity/viewKey.js +96 -0
- package/dist/esm/idl/index.d.ts +18 -0
- package/dist/esm/idl/index.js +18 -0
- package/dist/esm/idl/privacy_pool.json +9907 -9907
- package/dist/esm/idl/privacy_pool_legacy.d.ts +5 -0
- package/dist/esm/idl/privacy_pool_legacy.js +3305 -0
- package/dist/esm/idl/privacy_pool_legacy.json +2302 -0
- package/dist/esm/idl/privacy_pool_legacy2.d.ts +5 -0
- package/dist/esm/idl/privacy_pool_legacy2.js +3395 -0
- package/dist/esm/idl/privacy_pool_legacy2.json +2376 -0
- package/dist/esm/index.d.ts +9 -3
- package/dist/esm/index.js +10 -3
- package/dist/esm/notes/amount.d.ts +2 -0
- package/dist/esm/notes/amount.js +18 -0
- package/dist/esm/notes/encryption.d.ts +41 -0
- package/dist/esm/notes/encryption.js +67 -0
- package/dist/esm/notes/index.d.ts +8 -0
- package/dist/esm/notes/index.js +8 -0
- package/dist/esm/notes/mailbox.d.ts +70 -0
- package/dist/esm/notes/mailbox.js +154 -0
- package/dist/esm/notes/model.d.ts +91 -0
- package/dist/esm/notes/model.js +99 -0
- package/dist/esm/notes/nullifier.d.ts +27 -0
- package/dist/esm/notes/nullifier.js +40 -0
- package/dist/esm/notes/recovery.d.ts +20 -0
- package/dist/esm/notes/recovery.js +45 -0
- package/dist/esm/notes/selection.d.ts +77 -0
- package/dist/esm/notes/selection.js +188 -0
- package/dist/esm/notes/spent.d.ts +60 -0
- package/dist/esm/notes/spent.js +96 -0
- package/dist/esm/perps/constants.d.ts +16 -0
- package/dist/esm/perps/constants.js +48 -0
- package/dist/esm/perps/index.d.ts +5 -0
- package/dist/esm/perps/index.js +5 -0
- package/dist/esm/perps/keys.d.ts +16 -0
- package/dist/esm/perps/keys.js +35 -0
- package/dist/esm/perps/pdas.d.ts +29 -0
- package/dist/esm/perps/pdas.js +47 -0
- package/dist/esm/perps/relayer.d.ts +9 -0
- package/dist/esm/perps/relayer.js +25 -0
- package/dist/esm/perps/types.d.ts +126 -0
- package/dist/esm/perps/types.js +1 -0
- package/dist/esm/positions/index.d.ts +4 -0
- package/dist/esm/positions/index.js +4 -0
- package/dist/esm/positions/keys.d.ts +29 -0
- package/dist/esm/positions/keys.js +65 -0
- package/dist/esm/positions/pdas.d.ts +15 -0
- package/dist/esm/positions/pdas.js +44 -0
- package/dist/esm/positions/relayer.d.ts +4 -0
- package/dist/esm/positions/relayer.js +10 -0
- package/dist/esm/positions/types.d.ts +97 -0
- package/dist/esm/positions/types.js +1 -0
- package/dist/esm/predictions/client.d.ts +41 -0
- package/dist/esm/predictions/client.js +141 -0
- package/dist/esm/predictions/index.d.ts +5 -0
- package/dist/esm/predictions/index.js +5 -0
- package/dist/esm/predictions/keys.d.ts +14 -0
- package/dist/esm/predictions/keys.js +33 -0
- package/dist/esm/predictions/pdas.d.ts +6 -0
- package/dist/esm/predictions/pdas.js +10 -0
- package/dist/esm/predictions/relayer.d.ts +3 -0
- package/dist/esm/predictions/relayer.js +7 -0
- package/dist/esm/predictions/types.d.ts +178 -0
- package/dist/esm/predictions/types.js +1 -0
- package/dist/esm/program.d.ts +2 -0
- package/dist/esm/program.js +4 -3
- package/dist/esm/proof.d.ts +1 -183
- package/dist/esm/proof.js +2 -281
- package/dist/esm/proofs/encoding.d.ts +17 -0
- package/dist/esm/proofs/encoding.js +68 -0
- package/dist/esm/proofs/formatting.d.ts +6 -0
- package/dist/esm/proofs/formatting.js +31 -0
- package/dist/esm/proofs/index.d.ts +5 -0
- package/dist/esm/proofs/index.js +5 -0
- package/dist/esm/proofs/swap.d.ts +87 -0
- package/dist/esm/proofs/swap.js +138 -0
- package/dist/esm/proofs/transaction.d.ts +28 -0
- package/dist/esm/proofs/transaction.js +105 -0
- package/dist/esm/proofs/types.d.ts +70 -0
- package/dist/esm/proofs/types.js +1 -0
- package/dist/esm/prover.d.ts +30 -4
- package/dist/esm/prover.js +115 -15
- package/dist/esm/relayer/api.d.ts +31 -0
- package/dist/esm/relayer/api.js +55 -0
- package/dist/esm/relayer/client.d.ts +73 -0
- package/dist/esm/relayer/client.js +199 -0
- package/dist/esm/relayer/crypto.d.ts +5 -0
- package/dist/esm/relayer/crypto.js +20 -0
- package/dist/esm/relayer/encoding.d.ts +2 -0
- package/dist/esm/relayer/encoding.js +19 -0
- package/dist/esm/relayer/errors.d.ts +7 -0
- package/dist/esm/relayer/errors.js +13 -0
- package/dist/esm/relayer/index.d.ts +6 -0
- package/dist/esm/relayer/index.js +3 -0
- package/dist/esm/relayer/internal-config.d.ts +36 -0
- package/dist/esm/relayer/internal-config.js +6 -0
- package/dist/esm/relayer/internal.d.ts +6 -0
- package/dist/esm/relayer/internal.js +10 -0
- package/dist/esm/relayer/transport.d.ts +19 -0
- package/dist/esm/relayer/transport.js +64 -0
- package/dist/esm/relayer/types.d.ts +275 -0
- package/dist/esm/relayer/types.js +4 -0
- package/dist/esm/relayer.d.ts +1 -318
- package/dist/esm/relayer.js +2 -249
- package/dist/esm/shield/alt.js +1 -1
- package/dist/esm/shield/errors.js +1 -1
- package/dist/esm/shield/finalize.js +1 -1
- package/dist/esm/shield/ix.d.ts +1 -1
- package/dist/esm/shield/owner.js +3 -5
- package/dist/esm/shield/ports.js +1 -1
- package/dist/esm/shield/preflight.js +1 -1
- package/dist/esm/shield/shield.js +4 -3
- package/dist/esm/shield/types.d.ts +1 -1
- package/dist/esm/transactions/deposit.d.ts +94 -0
- package/dist/esm/transactions/deposit.js +198 -0
- package/dist/esm/transactions/index.d.ts +7 -0
- package/dist/esm/transactions/index.js +7 -0
- package/dist/esm/transactions/swap.d.ts +71 -0
- package/dist/esm/transactions/swap.js +144 -0
- package/dist/esm/transactions/transact.d.ts +34 -0
- package/dist/esm/transactions/transact.js +110 -0
- package/dist/esm/transactions/transfer.d.ts +51 -0
- package/dist/esm/transactions/transfer.js +103 -0
- package/dist/esm/transactions/withdraw.d.ts +52 -0
- package/dist/esm/transactions/withdraw.js +101 -0
- package/dist/esm/utxo.d.ts +1 -235
- package/dist/esm/utxo.js +2 -382
- package/identity.d.ts +2 -0
- package/identity.js +3 -0
- package/idl.d.ts +2 -0
- package/idl.js +3 -0
- package/notes.d.ts +2 -0
- package/notes.js +3 -0
- package/package.json +131 -11
- package/perps.d.ts +2 -0
- package/perps.js +3 -0
- package/poseidon.d.ts +2 -2
- package/poseidon.js +2 -3
- package/positions.d.ts +2 -0
- package/positions.js +3 -0
- package/predictions.d.ts +2 -0
- package/predictions.js +3 -0
- package/proof.d.ts +2 -2
- package/proof.js +2 -3
- package/prover.d.ts +2 -2
- package/prover.js +2 -3
- package/relayer.d.ts +2 -0
- package/relayer.js +3 -0
- package/shield.d.ts +2 -2
- package/shield.js +2 -3
- package/transactions.d.ts +2 -0
- package/transactions.js +3 -0
- package/SHIELD_INTEGRATION.md +0 -143
- package/dist/src/client.d.ts +0 -407
- package/dist/src/client.js +0 -951
- package/dist/src/compactNote.d.ts +0 -107
- package/dist/src/compactNote.js +0 -167
- package/dist/src/config.d.ts +0 -82
- package/dist/src/config.js +0 -57
- package/dist/src/events.d.ts +0 -77
- package/dist/src/events.js +0 -167
- package/dist/src/idl/privacy_pool.js +0 -15218
- package/dist/src/index.d.ts +0 -16
- package/dist/src/index.js +0 -67
- package/dist/src/merkle.d.ts +0 -77
- package/dist/src/merkle.js +0 -156
- package/dist/src/poseidon.d.ts +0 -29
- package/dist/src/poseidon.js +0 -100
- package/dist/src/program.d.ts +0 -37
- package/dist/src/program.js +0 -61
- package/dist/src/proof.d.ts +0 -183
- package/dist/src/proof.js +0 -292
- package/dist/src/prover.d.ts +0 -54
- package/dist/src/prover.js +0 -112
- package/dist/src/random.d.ts +0 -16
- package/dist/src/random.js +0 -28
- package/dist/src/relayer.js +0 -257
- package/dist/src/retry.d.ts +0 -32
- package/dist/src/retry.js +0 -75
- package/dist/src/shield/alt.d.ts +0 -87
- package/dist/src/shield/alt.js +0 -194
- package/dist/src/shield/computeBudget.d.ts +0 -61
- package/dist/src/shield/computeBudget.js +0 -64
- package/dist/src/shield/errors.d.ts +0 -58
- package/dist/src/shield/errors.js +0 -121
- package/dist/src/shield/finalize.d.ts +0 -45
- package/dist/src/shield/finalize.js +0 -119
- package/dist/src/shield/index.d.ts +0 -35
- package/dist/src/shield/index.js +0 -68
- package/dist/src/shield/ix.d.ts +0 -54
- package/dist/src/shield/ix.js +0 -119
- package/dist/src/shield/owner.d.ts +0 -36
- package/dist/src/shield/owner.js +0 -126
- package/dist/src/shield/ports.d.ts +0 -43
- package/dist/src/shield/ports.js +0 -153
- package/dist/src/shield/preflight.d.ts +0 -30
- package/dist/src/shield/preflight.js +0 -154
- package/dist/src/shield/shield.d.ts +0 -68
- package/dist/src/shield/shield.js +0 -499
- package/dist/src/shield/types.d.ts +0 -202
- package/dist/src/utxo.d.ts +0 -235
- package/dist/src/utxo.js +0 -407
- package/dist/tests/compact-note.test.d.ts +0 -1
- package/dist/tests/compact-note.test.js +0 -173
- package/dist/tests/config.test.d.ts +0 -1
- package/dist/tests/config.test.js +0 -102
- package/dist/tests/edge-cases.test.d.ts +0 -1
- package/dist/tests/edge-cases.test.js +0 -220
- package/dist/tests/encryption.test.d.ts +0 -1
- package/dist/tests/encryption.test.js +0 -215
- package/dist/tests/events.test.d.ts +0 -1
- package/dist/tests/events.test.js +0 -78
- package/dist/tests/multi-tree.test.d.ts +0 -1
- package/dist/tests/multi-tree.test.js +0 -405
- package/dist/tests/pda.test.d.ts +0 -1
- package/dist/tests/pda.test.js +0 -229
- package/dist/tests/poseidon-builder-parity.test.d.ts +0 -1
- package/dist/tests/poseidon-builder-parity.test.js +0 -72
- package/dist/tests/poseidon.test.d.ts +0 -1
- package/dist/tests/poseidon.test.js +0 -142
- package/dist/tests/proof.test.d.ts +0 -1
- package/dist/tests/proof.test.js +0 -296
- package/dist/tests/relayer.test.d.ts +0 -1
- package/dist/tests/relayer.test.js +0 -271
- package/dist/tests/sdk.integration.test.d.ts +0 -1
- package/dist/tests/sdk.integration.test.js +0 -330
- package/dist/tests/shield-owner.test.d.ts +0 -1
- package/dist/tests/shield-owner.test.js +0 -89
- package/dist/tests/shield-preflight.test.d.ts +0 -1
- package/dist/tests/shield-preflight.test.js +0 -87
- package/dist/tests/shield-realproof.test.d.ts +0 -1
- package/dist/tests/shield-realproof.test.js +0 -272
- package/dist/tests/shield.test.d.ts +0 -1
- package/dist/tests/shield.test.js +0 -403
- package/dist/tests/utxo.test.d.ts +0 -1
- package/dist/tests/utxo.test.js +0 -140
- /package/dist/{src/shield → cjs/events}/types.js +0 -0
- /package/dist/{src/idl/privacy_pool.d.ts → cjs/idl/privacy_pool_legacy.d.ts} +0 -0
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import nacl from "tweetnacl";
|
|
2
|
+
import { encryptForRelayer } from "./crypto.js";
|
|
3
|
+
import { fromBase64, toBase64 } from "./encoding.js";
|
|
4
|
+
import { VEILO_RELAYER_PUBLIC_KEY, } from "./internal-config.js";
|
|
5
|
+
import { RelayerHttpTransport } from "./transport.js";
|
|
6
|
+
// =============================================================================
|
|
7
|
+
// Relayer Client
|
|
8
|
+
// =============================================================================
|
|
9
|
+
/** @internal Relayer transport behind the SDK's functional helpers. */
|
|
10
|
+
export class VeiloRelayerClient {
|
|
11
|
+
constructor(config = {}, retry) {
|
|
12
|
+
this.transport = new RelayerHttpTransport(config, retry);
|
|
13
|
+
this.relayerPubKey = fromBase64(config.encryptionPublicKey ?? VEILO_RELAYER_PUBLIC_KEY);
|
|
14
|
+
}
|
|
15
|
+
/** Update the auth token (e.g. after register/restore). */
|
|
16
|
+
setAuthToken(token) {
|
|
17
|
+
this.transport.setAuthToken(token);
|
|
18
|
+
}
|
|
19
|
+
encryptPayload(data) {
|
|
20
|
+
return encryptForRelayer({
|
|
21
|
+
...data,
|
|
22
|
+
timestamp: Date.now(),
|
|
23
|
+
nonce: toBase64(nacl.randomBytes(32)),
|
|
24
|
+
}, this.relayerPubKey);
|
|
25
|
+
}
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// Auth
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
/** Request a signature challenge for wallet authentication. */
|
|
30
|
+
async getChallenge(walletPublicKey) {
|
|
31
|
+
return this.transport.request("POST", "/auth/challenge", {
|
|
32
|
+
body: { walletPublicKey },
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/** Register a new account with a signed challenge. Returns a JWT auth token. */
|
|
36
|
+
async register(data) {
|
|
37
|
+
return this.transport.request("POST", "/auth/register", { body: data });
|
|
38
|
+
}
|
|
39
|
+
/** Restore an existing account using a signed challenge. Returns a JWT auth token. */
|
|
40
|
+
async restore(data) {
|
|
41
|
+
return this.transport.request("POST", "/auth/restore", { body: data });
|
|
42
|
+
}
|
|
43
|
+
/** Check whether a username is available for registration. */
|
|
44
|
+
async checkUsername(username) {
|
|
45
|
+
return this.transport.request("GET", `/auth/checkUsername?username=${encodeURIComponent(username)}`);
|
|
46
|
+
}
|
|
47
|
+
/** Look up a user's Veilo public key by username or wallet public key. */
|
|
48
|
+
async getVeiloPublicKey(params) {
|
|
49
|
+
const query = "username" in params && params.username
|
|
50
|
+
? `username=${encodeURIComponent(params.username)}`
|
|
51
|
+
: `publicKey=${encodeURIComponent(params.publicKey)}`;
|
|
52
|
+
return this.transport.request("GET", `/auth/veiloPublicKey?${query}`);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Provision (or retrieve) the Veilo spend key paired with a Solana address.
|
|
56
|
+
* Public and idempotent; the response contains public key material only.
|
|
57
|
+
*/
|
|
58
|
+
async preRegisterKey(solanaAddress) {
|
|
59
|
+
return this.transport.request("POST", "/auth/pre-register-key", {
|
|
60
|
+
body: { solanaAddress },
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
// ---------------------------------------------------------------------------
|
|
64
|
+
// Notes
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
/** Save an encrypted note to the relayer's database. */
|
|
67
|
+
async saveEncryptedNote(data) {
|
|
68
|
+
return this.transport.request("POST", "/notes/save", { body: data });
|
|
69
|
+
}
|
|
70
|
+
/** Query encrypted notes for the authenticated user. Requires auth token. */
|
|
71
|
+
async queryEncryptedNotes(params = {}) {
|
|
72
|
+
return this.transport.request("POST", "/notes/query", {
|
|
73
|
+
body: params,
|
|
74
|
+
authenticated: true,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
/** Delete all stored data for the authenticated user. Requires auth token. */
|
|
78
|
+
/**
|
|
79
|
+
* Ask which of these nullifiers the relayer has seen spent.
|
|
80
|
+
*
|
|
81
|
+
* Caller must respect MAX_NULLIFIERS_PER_CHECK; `checkNullifiersSpent` in
|
|
82
|
+
* notes/spent.ts does the chunking. Unauthenticated: a nullifier reveals
|
|
83
|
+
* nothing about ownership on its own.
|
|
84
|
+
*/
|
|
85
|
+
async checkNullifiers(nullifiers) {
|
|
86
|
+
return this.transport.request("POST", "/notes/nullifiers/check-batch", {
|
|
87
|
+
body: { nullifiers },
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
async deleteUserData() {
|
|
91
|
+
return this.transport.request("POST", "/notes/delete", { authenticated: true });
|
|
92
|
+
}
|
|
93
|
+
// ---------------------------------------------------------------------------
|
|
94
|
+
// Merkle
|
|
95
|
+
// ---------------------------------------------------------------------------
|
|
96
|
+
/** Fetch the current Merkle root for a pool, optionally filtered by mint and tree ID. */
|
|
97
|
+
async getMerkleRoot(mintAddress, treeId) {
|
|
98
|
+
const params = new URLSearchParams();
|
|
99
|
+
if (mintAddress)
|
|
100
|
+
params.append("mintAddress", mintAddress);
|
|
101
|
+
if (treeId !== undefined)
|
|
102
|
+
params.append("treeId", treeId.toString());
|
|
103
|
+
const qs = params.toString();
|
|
104
|
+
return this.transport.request("GET", `/merkle/root${qs ? `?${qs}` : ""}`);
|
|
105
|
+
}
|
|
106
|
+
/** Fetch the full Merkle tree (all leaves) for a pool. */
|
|
107
|
+
async getMerkleTree(mintAddress, treeId) {
|
|
108
|
+
const params = new URLSearchParams();
|
|
109
|
+
if (mintAddress)
|
|
110
|
+
params.append("mintAddress", mintAddress);
|
|
111
|
+
if (treeId !== undefined)
|
|
112
|
+
params.append("treeId", treeId.toString());
|
|
113
|
+
const qs = params.toString();
|
|
114
|
+
return this.transport.request("GET", `/merkle/tree${qs ? `?${qs}` : ""}`);
|
|
115
|
+
}
|
|
116
|
+
// ---------------------------------------------------------------------------
|
|
117
|
+
// Transact (encrypted payloads)
|
|
118
|
+
// ---------------------------------------------------------------------------
|
|
119
|
+
/** Submit an encrypted withdrawal request to the relayer. Not retried on failure. */
|
|
120
|
+
async submitWithdraw(data) {
|
|
121
|
+
const encryptedPayload = this.encryptPayload(data);
|
|
122
|
+
return this.transport.request("POST", "/transact/withdraw", {
|
|
123
|
+
body: { encryptedPayload },
|
|
124
|
+
retryable: false,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
/** Submit an encrypted private transfer request. Not retried on failure. */
|
|
128
|
+
async submitPrivateTransfer(data) {
|
|
129
|
+
const encryptedPayload = this.encryptPayload(data);
|
|
130
|
+
return this.transport.request("POST", "/transact/private-transfer", {
|
|
131
|
+
body: { encryptedPayload },
|
|
132
|
+
retryable: false,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
/** Submit an encrypted private swap request. Not retried on failure. */
|
|
136
|
+
async submitPrivateSwap(data) {
|
|
137
|
+
const encryptedPayload = this.encryptPayload(data);
|
|
138
|
+
return this.transport.request("POST", "/transact/private-swap", {
|
|
139
|
+
body: { encryptedPayload },
|
|
140
|
+
retryable: false,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
// ---------------------------------------------------------------------------
|
|
144
|
+
// Private positions (encrypted payloads)
|
|
145
|
+
// ---------------------------------------------------------------------------
|
|
146
|
+
async submitOpenPosition(data) {
|
|
147
|
+
return this.submitEncrypted("/positions/open", data);
|
|
148
|
+
}
|
|
149
|
+
async submitClosePosition(data) {
|
|
150
|
+
return this.submitEncrypted("/positions/close", data);
|
|
151
|
+
}
|
|
152
|
+
async submitMergePositions(data) {
|
|
153
|
+
return this.submitEncrypted("/positions/merge", data);
|
|
154
|
+
}
|
|
155
|
+
// ---------------------------------------------------------------------------
|
|
156
|
+
// Private Jupiter Perps (encrypted payloads)
|
|
157
|
+
// ---------------------------------------------------------------------------
|
|
158
|
+
async submitJperpOpen(data) {
|
|
159
|
+
return this.submitEncrypted("/jperp/open", data);
|
|
160
|
+
}
|
|
161
|
+
async submitJperpClose(data) {
|
|
162
|
+
return this.submitEncrypted("/jperp/close", data);
|
|
163
|
+
}
|
|
164
|
+
async submitJperpSetTpsl(data) {
|
|
165
|
+
return this.submitEncrypted("/jperp/set-tpsl", data);
|
|
166
|
+
}
|
|
167
|
+
async submitJperpUpdateTpsl(data) {
|
|
168
|
+
return this.submitEncrypted("/jperp/update-tpsl", data);
|
|
169
|
+
}
|
|
170
|
+
async submitJperpCancelTrigger(data) {
|
|
171
|
+
return this.submitEncrypted("/jperp/cancel-trigger", data);
|
|
172
|
+
}
|
|
173
|
+
async submitJperpReissue(data) {
|
|
174
|
+
return this.submitEncrypted("/jperp/reissue", data);
|
|
175
|
+
}
|
|
176
|
+
async submitJperpRecoverSeed(data) {
|
|
177
|
+
return this.submitEncrypted("/jperp/recover-seed", data);
|
|
178
|
+
}
|
|
179
|
+
async submitJperpRecoverNative(data) {
|
|
180
|
+
return this.submitEncrypted("/jperp/recover-native", data);
|
|
181
|
+
}
|
|
182
|
+
// ---------------------------------------------------------------------------
|
|
183
|
+
// Private Jupiter Predictions (encrypted payloads)
|
|
184
|
+
// ---------------------------------------------------------------------------
|
|
185
|
+
async submitPredictionOpen(data) {
|
|
186
|
+
return this.submitEncrypted("/predictions/open", data);
|
|
187
|
+
}
|
|
188
|
+
async submitPredictionReissue(data) {
|
|
189
|
+
return this.submitEncrypted("/predictions/reissue", data);
|
|
190
|
+
}
|
|
191
|
+
submitEncrypted(route, data) {
|
|
192
|
+
const encryptedPayload = this.encryptPayload(data);
|
|
193
|
+
return this.transport.request("POST", route, {
|
|
194
|
+
body: { encryptedPayload },
|
|
195
|
+
// These endpoints can land transactions; automatic replay is unsafe.
|
|
196
|
+
retryable: false,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import nacl from "tweetnacl";
|
|
2
|
+
import { toBase64 } from "./encoding.js";
|
|
3
|
+
// =============================================================================
|
|
4
|
+
// Encryption
|
|
5
|
+
// =============================================================================
|
|
6
|
+
/**
|
|
7
|
+
* Encrypt a JSON-serializable payload for the relayer using NaCl box.
|
|
8
|
+
* Layout: [ephemeralPubKey (32)] [nonce (24)] [ciphertext (...)]
|
|
9
|
+
*/
|
|
10
|
+
export function encryptForRelayer(data, relayerPublicKey) {
|
|
11
|
+
const ephemeral = nacl.box.keyPair();
|
|
12
|
+
const message = new TextEncoder().encode(JSON.stringify(data));
|
|
13
|
+
const nonce = nacl.randomBytes(nacl.box.nonceLength);
|
|
14
|
+
const ciphertext = nacl.box(message, nonce, relayerPublicKey, ephemeral.secretKey);
|
|
15
|
+
const payload = new Uint8Array(ephemeral.publicKey.length + nonce.length + ciphertext.length);
|
|
16
|
+
payload.set(ephemeral.publicKey, 0);
|
|
17
|
+
payload.set(nonce, ephemeral.publicKey.length);
|
|
18
|
+
payload.set(ciphertext, ephemeral.publicKey.length + nonce.length);
|
|
19
|
+
return toBase64(payload);
|
|
20
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// Base64 helpers (no dependency on tweetnacl-util)
|
|
3
|
+
// =============================================================================
|
|
4
|
+
export function toBase64(bytes) {
|
|
5
|
+
if (typeof Buffer !== "undefined") {
|
|
6
|
+
return Buffer.from(bytes).toString("base64");
|
|
7
|
+
}
|
|
8
|
+
return btoa(String.fromCharCode(...bytes));
|
|
9
|
+
}
|
|
10
|
+
export function fromBase64(str) {
|
|
11
|
+
if (typeof Buffer !== "undefined") {
|
|
12
|
+
return new Uint8Array(Buffer.from(str, "base64"));
|
|
13
|
+
}
|
|
14
|
+
const binary = atob(str);
|
|
15
|
+
const bytes = new Uint8Array(binary.length);
|
|
16
|
+
for (let i = 0; i < binary.length; i++)
|
|
17
|
+
bytes[i] = binary.charCodeAt(i);
|
|
18
|
+
return bytes;
|
|
19
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// Structured Error
|
|
3
|
+
// =============================================================================
|
|
4
|
+
/** Structured error thrown by managed Veilo API helpers. */
|
|
5
|
+
export class VeiloApiError extends Error {
|
|
6
|
+
constructor(code, message, status, details) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.name = "VeiloApiError";
|
|
9
|
+
this.code = code;
|
|
10
|
+
this.status = status;
|
|
11
|
+
this.details = details;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Veilo network coordinates are protocol configuration, not integrator input.
|
|
3
|
+
* Keep them behind the public package entry points.
|
|
4
|
+
*/
|
|
5
|
+
export declare const VEILO_RELAYER_URL = "https://relayer-server.onrender.com";
|
|
6
|
+
export declare const VEILO_RELAYER_PUBLIC_KEY = "utVxnA7zax09qJCZ7UJsa8PAOoWLRcCwOkdxg/ZGmD4=";
|
|
7
|
+
/**
|
|
8
|
+
* Internal construction options. Overrides exist only for isolated tests.
|
|
9
|
+
*
|
|
10
|
+
* ⚠ `baseUrl` MUST NOT be promoted to the public API. Two invariants depend on
|
|
11
|
+
* it staying internal:
|
|
12
|
+
*
|
|
13
|
+
* 1. The privacy pool gates every spend on an on-chain relayer allowlist
|
|
14
|
+
* (`RelayerNotAllowed`). Only deposits are permissionless. A request sent
|
|
15
|
+
* to any other host cannot land on chain, so the option would be a
|
|
16
|
+
* footgun that fails late rather than a feature.
|
|
17
|
+
* 2. These request bodies carry note spending keys (`TransactNote.privateKey`,
|
|
18
|
+
* and `claimantSecretKey` on position close/merge). A caller-settable
|
|
19
|
+
* destination is a caller-settable exfiltration target for user funds.
|
|
20
|
+
*
|
|
21
|
+
* Only `internal.ts` may construct these options, and it builds the object
|
|
22
|
+
* literal itself — no caller-supplied object is ever forwarded here. To verify
|
|
23
|
+
* that still holds:
|
|
24
|
+
*
|
|
25
|
+
* grep -rn "createInternalRelayerClient(\|new VeiloRelayerClient(" src
|
|
26
|
+
*
|
|
27
|
+
* Whitelisted partners who run their own relayer are handled out of band, not
|
|
28
|
+
* by a config flag. See README → "Submission always targets Veilo's relayer".
|
|
29
|
+
*/
|
|
30
|
+
export interface InternalRelayerClientOptions {
|
|
31
|
+
authToken?: string;
|
|
32
|
+
apiKey?: string;
|
|
33
|
+
baseUrl?: string;
|
|
34
|
+
encryptionPublicKey?: string;
|
|
35
|
+
fetch?: typeof fetch;
|
|
36
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Veilo network coordinates are protocol configuration, not integrator input.
|
|
3
|
+
* Keep them behind the public package entry points.
|
|
4
|
+
*/
|
|
5
|
+
export const VEILO_RELAYER_URL = "https://relayer-server.onrender.com";
|
|
6
|
+
export const VEILO_RELAYER_PUBLIC_KEY = "utVxnA7zax09qJCZ7UJsa8PAOoWLRcCwOkdxg/ZGmD4=";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { VeiloRelayerClient } from "./client.js";
|
|
2
|
+
import type { InternalRelayerClientOptions } from "./internal-config.js";
|
|
3
|
+
/** @internal Shared stateless production client for public SDK helpers. */
|
|
4
|
+
export declare function getInternalRelayerClient(): VeiloRelayerClient;
|
|
5
|
+
/** @internal Auth state is isolated per call to avoid cross-user token leaks. */
|
|
6
|
+
export declare function createInternalRelayerClient(options?: InternalRelayerClientOptions): VeiloRelayerClient;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { VeiloRelayerClient } from "./client.js";
|
|
2
|
+
const RELAYER = new VeiloRelayerClient();
|
|
3
|
+
/** @internal Shared stateless production client for public SDK helpers. */
|
|
4
|
+
export function getInternalRelayerClient() {
|
|
5
|
+
return RELAYER;
|
|
6
|
+
}
|
|
7
|
+
/** @internal Auth state is isolated per call to avoid cross-user token leaks. */
|
|
8
|
+
export function createInternalRelayerClient(options = {}) {
|
|
9
|
+
return new VeiloRelayerClient(options);
|
|
10
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type InternalRelayerClientOptions } from "./internal-config.js";
|
|
2
|
+
import type { RetryPolicy } from "./types.js";
|
|
3
|
+
export interface RelayerRequestOptions {
|
|
4
|
+
body?: unknown;
|
|
5
|
+
authenticated?: boolean;
|
|
6
|
+
retryable?: boolean;
|
|
7
|
+
}
|
|
8
|
+
/** Owns HTTP authentication, retry, and response normalization. */
|
|
9
|
+
export declare class RelayerHttpTransport {
|
|
10
|
+
private readonly baseUrl;
|
|
11
|
+
private readonly apiKey;
|
|
12
|
+
private authToken;
|
|
13
|
+
private readonly retry;
|
|
14
|
+
private readonly fetcher?;
|
|
15
|
+
constructor(config?: InternalRelayerClientOptions, retry?: Partial<RetryPolicy>);
|
|
16
|
+
setAuthToken(token: string): void;
|
|
17
|
+
request<T>(method: string, route: string, options?: RelayerRequestOptions): Promise<T>;
|
|
18
|
+
private headers;
|
|
19
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { VeiloApiError } from "./errors.js";
|
|
2
|
+
import { VEILO_RELAYER_URL, } from "./internal-config.js";
|
|
3
|
+
const DEFAULT_RETRY = {
|
|
4
|
+
maxRetries: 3,
|
|
5
|
+
baseDelayMs: 1000,
|
|
6
|
+
retryableStatuses: [429, 502, 503, 504],
|
|
7
|
+
};
|
|
8
|
+
/** Owns HTTP authentication, retry, and response normalization. */
|
|
9
|
+
export class RelayerHttpTransport {
|
|
10
|
+
constructor(config = {}, retry) {
|
|
11
|
+
this.baseUrl = (config.baseUrl?.trim() || VEILO_RELAYER_URL).replace(/\/+$/, "");
|
|
12
|
+
this.apiKey = config.apiKey ?? "";
|
|
13
|
+
this.authToken = config.authToken;
|
|
14
|
+
this.retry = { ...DEFAULT_RETRY, ...retry };
|
|
15
|
+
this.fetcher = config.fetch;
|
|
16
|
+
}
|
|
17
|
+
setAuthToken(token) {
|
|
18
|
+
this.authToken = token;
|
|
19
|
+
}
|
|
20
|
+
async request(method, route, options = {}) {
|
|
21
|
+
const url = `${this.baseUrl}/api${route}`;
|
|
22
|
+
const { body, authenticated = false, retryable = true } = options;
|
|
23
|
+
const maxAttempts = retryable ? this.retry.maxRetries + 1 : 1;
|
|
24
|
+
let lastError;
|
|
25
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
26
|
+
if (attempt > 0) {
|
|
27
|
+
const delay = this.retry.baseDelayMs * Math.pow(2, attempt - 1) + Math.random() * 200;
|
|
28
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
29
|
+
}
|
|
30
|
+
let response;
|
|
31
|
+
try {
|
|
32
|
+
const fetcher = this.fetcher ?? globalThis.fetch;
|
|
33
|
+
if (typeof fetcher !== "function") {
|
|
34
|
+
throw new Error("This environment does not provide fetch");
|
|
35
|
+
}
|
|
36
|
+
response = await fetcher(url, {
|
|
37
|
+
method,
|
|
38
|
+
headers: this.headers(authenticated),
|
|
39
|
+
body: body == null ? undefined : JSON.stringify(body),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
lastError = new VeiloApiError("NETWORK_ERROR", error instanceof Error ? error.message : "Network request failed", 0);
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
const data = await response.json().catch(() => ({}));
|
|
47
|
+
if (response.ok && data.success !== false)
|
|
48
|
+
return data;
|
|
49
|
+
lastError = new VeiloApiError(data.error || "UNKNOWN", data.message || data.error || `Request failed: ${response.status}`, response.status, data);
|
|
50
|
+
if (!this.retry.retryableStatuses.includes(response.status))
|
|
51
|
+
throw lastError;
|
|
52
|
+
}
|
|
53
|
+
throw lastError;
|
|
54
|
+
}
|
|
55
|
+
headers(authenticated) {
|
|
56
|
+
const headers = { "Content-Type": "application/json" };
|
|
57
|
+
if (this.apiKey)
|
|
58
|
+
headers["x-api-key"] = this.apiKey;
|
|
59
|
+
if (authenticated && this.authToken) {
|
|
60
|
+
headers.Authorization = `Bearer ${this.authToken}`;
|
|
61
|
+
}
|
|
62
|
+
return headers;
|
|
63
|
+
}
|
|
64
|
+
}
|