diff --git a/.github/release-please-manifest.json b/.github/release-please-manifest.json index e231c7f1..904d36d0 100644 --- a/.github/release-please-manifest.json +++ b/.github/release-please-manifest.json @@ -1,12 +1,12 @@ { - "packages/access-client": "1.0.2", + "packages/access-client": "1.0.3", "packages/blob-index": "1.0.1", - "packages/cli": "1.1.1", - "packages/filecoin-api": "1.1.1", + "packages/cli": "1.1.2", + "packages/filecoin-api": "1.1.2", "packages/filecoin-client": "1.0.2", - "packages/capabilities": "1.2.1", - "packages/upload-api": "1.3.2", - "packages/upload-client": "1.0.4", - "packages/w3up-client": "1.1.4", + "packages/capabilities": "1.2.2", + "packages/upload-api": "1.3.4", + "packages/upload-client": "1.0.5", + "packages/w3up-client": "1.1.5", "packages/did-mailto": "1.0.1" } diff --git a/packages/access-client/CHANGELOG.md b/packages/access-client/CHANGELOG.md index dca17b88..f683b817 100644 --- a/packages/access-client/CHANGELOG.md +++ b/packages/access-client/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [1.0.3](https://github.com/storacha/upload-service/compare/access-v1.0.2...access-v1.0.3) (2025-02-11) + + +### Fixes + +* dedupe proofs ([#143](https://github.com/storacha/upload-service/issues/143)) ([de2ac67](https://github.com/storacha/upload-service/commit/de2ac67c1af1f968cdb359f96e4be5fbd8254b7d)) +* use up.storacha.network ([#144](https://github.com/storacha/upload-service/issues/144)) ([ac6b5b4](https://github.com/storacha/upload-service/commit/ac6b5b4b9881f9889e99e18b38fbfb302b4fb3b5)) + ## [1.0.2](https://github.com/storacha/upload-service/compare/access-v1.0.1...access-v1.0.2) (2025-01-22) diff --git a/packages/access-client/package.json b/packages/access-client/package.json index a4fa0535..2034b26f 100644 --- a/packages/access-client/package.json +++ b/packages/access-client/package.json @@ -1,6 +1,6 @@ { "name": "@storacha/access", - "version": "1.0.2", + "version": "1.0.3", "description": "access client", "homepage": "https://storacha.network", "repository": { diff --git a/packages/access-client/src/agent.js b/packages/access-client/src/agent.js index 5fc067ef..75f9398d 100644 --- a/packages/access-client/src/agent.js +++ b/packages/access-client/src/agent.js @@ -265,25 +265,26 @@ export class Agent { * @param {API.DID} [options.sessionProofIssuer] - only include session proofs for this issuer */ proofs(caps, options) { - const authorizations = [] + /** @type {Map>} */ + const authorizations = new Map() for (const { delegation } of this.#delegations(caps)) { if (delegation.audience.did() === this.issuer.did()) { - authorizations.push(delegation) + authorizations.set(delegation.cid.toString(), delegation) } } // now let's add any session proofs that refer to those authorizations const sessions = getSessionProofs(this.#data) - for (const proof of authorizations) { + for (const proof of [...authorizations.values()]) { const proofsByIssuer = sessions[proof.asCID.toString()] ?? {} const sessionProofs = options?.sessionProofIssuer ? proofsByIssuer[options.sessionProofIssuer] ?? [] : Object.values(proofsByIssuer).flat() - if (sessionProofs.length) { - authorizations.push(...sessionProofs) + for (const sessionProof of sessionProofs) { + authorizations.set(sessionProof.cid.toString(), sessionProof) } } - return authorizations + return [...authorizations.values()] } /** diff --git a/packages/access-client/test/agent-use-cases.test.js b/packages/access-client/test/agent-use-cases.test.js index 94a585d1..3bd2389f 100644 --- a/packages/access-client/test/agent-use-cases.test.js +++ b/packages/access-client/test/agent-use-cases.test.js @@ -197,7 +197,7 @@ describe('authorizeWaitAndClaim', async function () { describe('getAccountPlan', async function () { const accountWithAPlan = 'did:mailto:example.com:i-have-a-plan' const accountWithoutAPlan = 'did:mailto:example.com:i-have-no-plan' - const product = 'did:web:test.upload.storacha.network' + const product = 'did:web:test.up.storacha.network' /** @type {Record} */ const plans = { [accountWithAPlan]: { diff --git a/packages/access-client/test/agent.test.js b/packages/access-client/test/agent.test.js index 478f8055..ac64b263 100644 --- a/packages/access-client/test/agent.test.js +++ b/packages/access-client/test/agent.test.js @@ -571,6 +571,25 @@ describe('Agent', function () { 'invocation for serviceBWeb does not have sessionProof from serviceAWeb' ) }) + + it('should dedupe proofs', async function () { + const agent = await Agent.create() + const space = await agent.createSpace('test-add') + const authorization = await space.createAuthorization(agent, { + access: { '*': {} }, + expiration: Infinity, + }) + + await agent.importSpaceFromDelegation(authorization) + const proofs = agent.proofs([ + { can: 'space/blob/add', with: space.did() }, + { can: 'space/index/add', with: space.did() }, + ]) + + // the same proof proves both capabilities + assert.equal(proofs.length, 1) + assert.equal(proofs[0].cid.toString(), authorization.cid.toString()) + }) }) /** diff --git a/packages/capabilities/CHANGELOG.md b/packages/capabilities/CHANGELOG.md index be4847bb..f2487343 100644 --- a/packages/capabilities/CHANGELOG.md +++ b/packages/capabilities/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [1.2.2](https://github.com/storacha/upload-service/compare/capabilities-v1.2.1...capabilities-v1.2.2) (2025-02-11) + + +### Fixes + +* use up.storacha.network ([#144](https://github.com/storacha/upload-service/issues/144)) ([ac6b5b4](https://github.com/storacha/upload-service/commit/ac6b5b4b9881f9889e99e18b38fbfb302b4fb3b5)) + ## [1.2.1](https://github.com/storacha/upload-service/compare/capabilities-v1.2.0...capabilities-v1.2.1) (2025-01-22) diff --git a/packages/capabilities/package.json b/packages/capabilities/package.json index 8eabfe81..68b12563 100644 --- a/packages/capabilities/package.json +++ b/packages/capabilities/package.json @@ -1,6 +1,6 @@ { "name": "@storacha/capabilities", - "version": "1.2.1", + "version": "1.2.2", "description": "UCAN Capabilities provided by storacha.network", "homepage": "https://storacha.network", "repository": { diff --git a/packages/capabilities/test/capabilities/provider.test.js b/packages/capabilities/test/capabilities/provider.test.js index 2d566bf6..7b50fd8a 100644 --- a/packages/capabilities/test/capabilities/provider.test.js +++ b/packages/capabilities/test/capabilities/provider.test.js @@ -18,7 +18,7 @@ describe('provider/add', function () { audience: service, with: account, nb: { - provider: 'did:web:test.upload.storacha.network', + provider: 'did:web:test.up.storacha.network', consumer: space.did(), }, proofs: await createAuthorization({ agent, service, account }), @@ -36,7 +36,7 @@ describe('provider/add', function () { assert.deepEqual(result.ok.audience.did(), service.did()) assert.equal(result.ok.capability.can, 'provider/add') assert.deepEqual(result.ok.capability.nb, { - provider: 'did:web:test.upload.storacha.network', + provider: 'did:web:test.up.storacha.network', consumer: space.did(), }) } @@ -51,7 +51,7 @@ describe('provider/add', function () { audience: service, with: account, nb: { - provider: 'did:web:test.upload.storacha.network', + provider: 'did:web:test.up.storacha.network', consumer: space.did(), }, }) @@ -80,7 +80,7 @@ describe('provider/add', function () { audience: service, with: account, nb: { - provider: 'did:web:test.upload.storacha.network', + provider: 'did:web:test.up.storacha.network', consumer: space.did(), }, proofs: [delegation], @@ -110,7 +110,7 @@ describe('provider/add', function () { audience: service, with: account, nb: { - provider: 'did:web:test.upload.storacha.network', + provider: 'did:web:test.up.storacha.network', consumer: space.did(), }, proofs: [attestation], @@ -135,7 +135,7 @@ describe('provider/add', function () { with: bobAccount.did(), // @ts-ignore nb: { - provider: 'did:web:test.upload.storacha.network', + provider: 'did:web:test.up.storacha.network', }, }) }, /Error: Invalid 'nb' - Object contains invalid field "consumer"/) @@ -149,7 +149,7 @@ describe('provider/add', function () { audience: service, with: bobAccount.did(), nb: { - provider: 'did:web:test.upload.storacha.network', + provider: 'did:web:test.up.storacha.network', // @ts-expect-error consumer: 'did:mailto:storacha.network:user', }, @@ -166,7 +166,7 @@ describe('provider/add', function () { with: bobAccount.did(), // @ts-expect-error - missing provider nb: { - // provider: 'did:web:test.upload.storacha.network', + // provider: 'did:web:test.up.storacha.network', consumer: bob.did(), }, }) @@ -197,7 +197,7 @@ describe('provider/add', function () { audience: service, with: account, nb: { - provider: 'did:web:test.upload.storacha.network', + provider: 'did:web:test.up.storacha.network', consumer: space.did(), }, proofs: [ @@ -206,7 +206,7 @@ describe('provider/add', function () { audience: bob, with: account, nb: { - provider: 'did:web:test.upload.storacha.network', + provider: 'did:web:test.up.storacha.network', consumer: space.did(), }, proofs: await createAuthorization({ agent, service, account }), @@ -233,7 +233,7 @@ describe('provider/add', function () { audience: service, with: account, nb: { - provider: 'did:web:test.upload.storacha.network', + provider: 'did:web:test.up.storacha.network', consumer: space.did(), }, proofs: [ @@ -242,7 +242,7 @@ describe('provider/add', function () { audience: bob, with: account, nb: { - provider: 'did:web:test.upload.storacha.network', + provider: 'did:web:test.up.storacha.network', }, proofs: await createAuthorization({ agent, service, account }), }), @@ -268,7 +268,7 @@ describe('provider/add', function () { audience: service, with: account, nb: { - provider: 'did:web:test.upload.storacha.network', + provider: 'did:web:test.up.storacha.network', consumer: space.did(), }, proofs: [ @@ -303,7 +303,7 @@ describe('provider/add', function () { audience: service, with: account, nb: { - provider: 'did:web:test.upload.storacha.network', + provider: 'did:web:test.up.storacha.network', consumer: bob.did(), }, proofs: [ @@ -338,7 +338,7 @@ describe('provider/add', function () { audience: service, with: account, nb: { - provider: 'did:web:test.upload.storacha.network', + provider: 'did:web:test.up.storacha.network', consumer: bob.did(), }, proofs: [ @@ -379,7 +379,7 @@ describe('provider/add', function () { audience: service, with: 'did:mailto:mallory.com:bob', nb: { - provider: 'did:web:test.upload.storacha.network', + provider: 'did:web:test.up.storacha.network', consumer: bob.did(), }, proofs: [ @@ -428,7 +428,7 @@ describe('provider/add', function () { with: account.did(), nb: { consumer: space.did(), - provider: 'did:web:test.upload.storacha.network', + provider: 'did:web:test.up.storacha.network', }, // NOTE: no proofs! }) diff --git a/packages/capabilities/test/helpers/fixtures.js b/packages/capabilities/test/helpers/fixtures.js index 11bbd15b..29d4c249 100644 --- a/packages/capabilities/test/helpers/fixtures.js +++ b/packages/capabilities/test/helpers/fixtures.js @@ -31,7 +31,7 @@ export const malloryAccount = Absentee.from({ export const service = Signer.parse( 'MgCYKXoHVy7Vk4/QjcEGi+MCqjntUiasxXJ8uJKY0qh11e+0Bs8WsdqGK7xothgrDzzWD0ME7ynPjz2okXDh8537lId8=' -).withDID('did:web:test.upload.storacha.network') +).withDID('did:web:test.up.storacha.network') export const readmeCID = parseLink( 'bafybeihqfdg2ereoijjoyrqzr2x2wsasqm2udurforw7pa3tvbnxhojao4' diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 4c77ee81..2bb6fcc8 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [1.1.2](https://github.com/storacha/upload-service/compare/cli-v1.1.1...cli-v1.1.2) (2025-02-11) + + +### Fixes + +* use up.storacha.network ([#144](https://github.com/storacha/upload-service/issues/144)) ([ac6b5b4](https://github.com/storacha/upload-service/commit/ac6b5b4b9881f9889e99e18b38fbfb302b4fb3b5)) + ## [1.1.1](https://github.com/storacha/upload-service/compare/cli-v1.1.0...cli-v1.1.1) (2025-01-22) diff --git a/packages/cli/README.md b/packages/cli/README.md index 22f4aa53..9071b7f4 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -271,23 +271,23 @@ Default `storacha-cli` ### `STORACHA_SERVICE_URL` -`storacha` CLI will use the w3up service at https://upload.storacha.network. If you would like +`storacha` CLI will use the w3up service at https://up.storacha.network. If you would like to use a different w3up-compatible service, set `STORACHA_SERVICE_DID` and `STORACHA_SERVICE_URL` environment variables to set the service DID and URL endpoint. -Default `https://upload.storacha.network` +Default `https://up.storacha.network` ### `STORACHA_SERVICE_DID` -`storacha` CLI will use the w3up `did:web:upload.storacha.network` as the service DID. If you would like +`storacha` CLI will use the w3up `did:web:up.storacha.network` as the service DID. If you would like to use a different w3up-compatible service, set `STORACHA_SERVICE_DID` and `STORACHA_SERVICE_URL` environment variables to set the service DID and URL endpoint. -Default `did:web:upload.storacha.network` +Default `did:web:up.storacha.network` ### `STORACHA_RECEIPTS_URL` The URL at which UCAN receipts issued by the service may be fetched. -Default `https://upload.storacha.network/receipt/` +Default `https://up.storacha.network/receipt/` ## FAQ diff --git a/packages/cli/package.json b/packages/cli/package.json index 45d6e63e..860f4db3 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,7 +1,7 @@ { "name": "@storacha/cli", "type": "module", - "version": "1.1.1", + "version": "1.1.2", "license": "Apache-2.0 OR MIT", "description": "Command Line Interface to the Storacha Network", "bin": { diff --git a/packages/cli/test/bin.spec.js b/packages/cli/test/bin.spec.js index 471571c8..4c5e9eb4 100644 --- a/packages/cli/test/bin.spec.js +++ b/packages/cli/test/bin.spec.js @@ -607,7 +607,7 @@ export const testSpace = { }) /** @type {import('@storacha/client/types').DID<'web'>} */ - const providerDID = 'did:web:test.upload.storacha.network' + const providerDID = 'did:web:test.up.storacha.network' const infoWithoutProvider = await storacha .args(['space', 'info']) diff --git a/packages/filecoin-api/CHANGELOG.md b/packages/filecoin-api/CHANGELOG.md index 2dfa68bb..a613c69e 100644 --- a/packages/filecoin-api/CHANGELOG.md +++ b/packages/filecoin-api/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [1.1.2](https://github.com/storacha/upload-service/compare/filecoin-api-v1.1.1...filecoin-api-v1.1.2) (2025-02-11) + + +### Fixes + +* use up.storacha.network ([#144](https://github.com/storacha/upload-service/issues/144)) ([ac6b5b4](https://github.com/storacha/upload-service/commit/ac6b5b4b9881f9889e99e18b38fbfb302b4fb3b5)) + ## [1.1.1](https://github.com/storacha/upload-service/compare/filecoin-api-v1.1.0...filecoin-api-v1.1.1) (2025-01-22) diff --git a/packages/filecoin-api/package.json b/packages/filecoin-api/package.json index a4b87d68..4847433a 100644 --- a/packages/filecoin-api/package.json +++ b/packages/filecoin-api/package.json @@ -1,6 +1,6 @@ { "name": "@storacha/filecoin-api", - "version": "1.1.1", + "version": "1.1.2", "type": "module", "main": "./src/lib.js", "homepage": "https://storacha.network", diff --git a/packages/upload-api/CHANGELOG.md b/packages/upload-api/CHANGELOG.md index 4b416456..c955af46 100644 --- a/packages/upload-api/CHANGELOG.md +++ b/packages/upload-api/CHANGELOG.md @@ -1,5 +1,21 @@ # Changelog +## [1.3.4](https://github.com/storacha/upload-service/compare/upload-api-v1.3.3...upload-api-v1.3.4) (2025-02-11) + + +### Fixes + +* store w3s accept invocation ([#142](https://github.com/storacha/upload-service/issues/142)) ([e0c509d](https://github.com/storacha/upload-service/commit/e0c509dec75386e3275abaca1e94c4de0ccefacd)) +* use up.storacha.network ([#144](https://github.com/storacha/upload-service/issues/144)) ([ac6b5b4](https://github.com/storacha/upload-service/commit/ac6b5b4b9881f9889e99e18b38fbfb302b4fb3b5)) + +## [1.3.3](https://github.com/storacha/upload-service/compare/upload-api-v1.3.2...upload-api-v1.3.3) (2025-01-29) + + +### Other Changes + +* **upload-api:** add comment for clarity ([c678bde](https://github.com/storacha/upload-service/commit/c678bde352ba44e9f320f731411705b2233e83ee)) +* **upload-api:** refactor(blob-registry): pass cause as a parameter to deregister ([632348d](https://github.com/storacha/upload-service/commit/632348d1529808f67873f332c695a504ca5bd7c4)) + ## [1.3.2](https://github.com/storacha/upload-service/compare/upload-api-v1.3.1...upload-api-v1.3.2) (2025-01-22) diff --git a/packages/upload-api/package.json b/packages/upload-api/package.json index 877f8de7..f0ae4982 100644 --- a/packages/upload-api/package.json +++ b/packages/upload-api/package.json @@ -1,7 +1,7 @@ { "name": "@storacha/upload-api", "description": "The upload api for storacha.network", - "version": "1.3.2", + "version": "1.3.4", "type": "module", "main": "./src/lib.js", "homepage": "https://storacha.network", diff --git a/packages/upload-api/src/blob/accept.js b/packages/upload-api/src/blob/accept.js index fde33d0b..f1435da0 100644 --- a/packages/upload-api/src/blob/accept.js +++ b/packages/upload-api/src/blob/accept.js @@ -99,6 +99,7 @@ export const poll = async (context, receipt) => { space: /** @type {API.DIDKey} */ (DID.decode(allocate.nb.space).did()), _put: { 'ucan/await': ['.out.ok', receipt.ran.link()] }, }, + expiration: Infinity, }) const w3sAcceptTask = await w3sAccept.delegate() const w3sAcceptReceipt = await Receipt.issue({ @@ -110,7 +111,7 @@ export const poll = async (context, receipt) => { // record the invocation and the receipt const message = await Message.build({ - invocations: [configure.ok.invocation], + invocations: [configure.ok.invocation, w3sAcceptTask], receipts: [acceptReceipt, w3sAcceptReceipt], }) const messageWrite = await context.agentStore.messages.write({ diff --git a/packages/upload-api/src/blob/add.js b/packages/upload-api/src/blob/add.js index 99850996..8a9b462d 100644 --- a/packages/upload-api/src/blob/add.js +++ b/packages/upload-api/src/blob/add.js @@ -69,7 +69,8 @@ export function blobAddProvider(context) { provider: allocation.ok.provider, blob, space, - delivery: delivery, + cause: invocation.link(), + delivery, }) if (acceptance.error) { return acceptance @@ -79,7 +80,7 @@ export function blobAddProvider(context) { context, blob, space, - delivery: delivery, + delivery, acceptance: acceptance.ok, }) @@ -248,7 +249,7 @@ async function allocateW3s({ context, blob, space, cause, receipt }) { * @param {object} put * @param {API.BlobModel} put.blob * @param {object} put.allocation - * @param {API.Receipt} put.allocation.receipt + * @param {API.Receipt} put.allocation.receipt */ async function put({ blob, allocation: { receipt: allocationReceipt } }) { // Derive the principal that will provide the blob from the blob digest. @@ -327,6 +328,7 @@ async function put({ blob, allocation: { receipt: allocationReceipt } }) { * @param {API.Principal} input.provider * @param {API.BlobModel} input.blob * @param {API.DIDKey} input.space + * @param {API.Link} input.cause Original `space/blob/add` invocation. * @param {object} input.delivery * @param {API.Invocation} input.delivery.task * @param {API.Receipt|null} input.delivery.receipt @@ -336,6 +338,7 @@ async function accept({ provider, blob, space, + cause, delivery: { task: deliveryTask, receipt: deliveryReceipt }, }) { // 1. Create blob/accept invocation and task @@ -376,6 +379,32 @@ async function accept({ // If put has already succeeded, we can execute `blob/accept` right away. else if (deliveryReceipt?.out.ok) { receipt = await configure.ok.invocation.execute(configure.ok.connection) + + // record the invocation and the receipt + const message = await Message.build({ + invocations: [configure.ok.invocation], + receipts: [receipt], + }) + const messageWrite = await context.agentStore.messages.write({ + source: await Transport.outbound.encode(message), + data: message, + index: [...AgentMessage.index(message)], + }) + if (messageWrite.error) { + return messageWrite + } + + const register = await context.registry.register({ + space, + cause, + blob: { digest: Digest.decode(blob.digest), size: blob.size }, + }) + if (register.error) { + // it's ok if there's already a registration of this blob in this space + if (register.error.name !== 'EntryExists') { + return register + } + } } return Server.ok({ @@ -419,6 +448,7 @@ async function acceptW3s({ space, _put: { 'ucan/await': ['.out.ok', deliveryTask.link()] }, }, + expiration: Infinity, }) const w3sAcceptTask = await w3sAccept.delegate() @@ -444,6 +474,7 @@ async function acceptW3s({ issuer: context.id, ran: w3sAcceptTask, result: acceptanceReceipt.out, + fx: acceptanceReceipt.fx, }) } diff --git a/packages/upload-api/src/blob/remove.js b/packages/upload-api/src/blob/remove.js index e806bc5d..81ef7159 100644 --- a/packages/upload-api/src/blob/remove.js +++ b/packages/upload-api/src/blob/remove.js @@ -8,27 +8,34 @@ import * as API from '../types.js' * @returns {API.ServiceMethod} */ export function blobRemoveProvider(context) { - return Server.provide(SpaceBlob.remove, async ({ capability }) => { - const space = capability.with - const digest = Digest.decode(capability.nb.digest) + return Server.provide( + SpaceBlob.remove, + async ({ capability, invocation }) => { + const space = capability.with + const digest = Digest.decode(capability.nb.digest) - const exists = await context.registry.find(space, digest) - if (exists.error) { - if (exists.error.name === 'EntryNotFound') { - return Server.ok({ size: 0 }) + const exists = await context.registry.find(space, digest) + if (exists.error) { + if (exists.error.name === 'EntryNotFound') { + return Server.ok({ size: 0 }) + } + return exists } - return exists - } - const dereg = await context.registry.deregister(space, digest) - if (dereg.error) { - // unlikely as we just found it...but possible I guess - if (dereg.error.name === 'EntryNotFound') { - return Server.ok({ size: 0 }) + const dereg = await context.registry.deregister({ + space, + digest, + cause: invocation.link(), + }) + if (dereg.error) { + // unlikely as we just found it...but possible I guess + if (dereg.error.name === 'EntryNotFound') { + return Server.ok({ size: 0 }) + } + return dereg } - return dereg - } - return Server.ok({ size: exists.ok?.blob.size }) - }) + return Server.ok({ size: exists.ok?.blob.size }) + } + ) } diff --git a/packages/upload-api/src/types/blob.ts b/packages/upload-api/src/types/blob.ts index ee97d251..75bc7882 100644 --- a/packages/upload-api/src/types/blob.ts +++ b/packages/upload-api/src/types/blob.ts @@ -60,10 +60,7 @@ export interface Registry { options?: ListOptions ) => Promise, Failure>> /** Removes an item from the registry if it exists. */ - deregister: ( - space: SpaceDID, - digest: MultihashDigest - ) => Promise> + deregister: (item: DeregistrationData) => Promise> } export interface ListOptions { @@ -76,6 +73,12 @@ export interface BlobModel { size: number } +export interface DeregistrationData { + space: SpaceDID + digest: MultihashDigest + cause: Link +} + export interface RegistrationData { space: SpaceDID cause: Link diff --git a/packages/upload-api/test/handlers/plan.js b/packages/upload-api/test/handlers/plan.js index a18c197e..d3d817d7 100644 --- a/packages/upload-api/test/handlers/plan.js +++ b/packages/upload-api/test/handlers/plan.js @@ -12,7 +12,7 @@ export const test = { 'an account can get plan information': async (assert, context) => { const account = 'did:mailto:example.com:alice' const billingID = 'stripe:abc123' - const product = 'did:web:test.upload.storacha.network' + const product = 'did:web:test.up.storacha.network' await context.plansStorage.initialize(account, billingID, product) const connection = connect({ id: context.id, diff --git a/packages/upload-api/test/helpers/context.js b/packages/upload-api/test/helpers/context.js index 16a090ef..60cd05d3 100644 --- a/packages/upload-api/test/helpers/context.js +++ b/packages/upload-api/test/helpers/context.js @@ -29,7 +29,7 @@ export const createContext = async ( const signer = await Signer.generate() const aggregatorSigner = await Signer.generate() const dealTrackerSigner = await Signer.generate() - const id = signer.withDID('did:web:test.upload.storacha.network') + const id = signer.withDID('did:web:test.up.storacha.network') const service = getMockService() const dealTrackerConnection = getConnection( diff --git a/packages/upload-api/test/storage/blob-registry-tests.js b/packages/upload-api/test/storage/blob-registry-tests.js index 13d95efa..79d5aae7 100644 --- a/packages/upload-api/test/storage/blob-registry-tests.js +++ b/packages/upload-api/test/storage/blob-registry-tests.js @@ -137,7 +137,8 @@ export const test = { const { registry } = context const data = new Uint8Array([11, 22, 34, 44, 55]) const digest = await sha256.digest(data) - const dereg = await registry.deregister(space, digest) + const cause = await randomCID() + const dereg = await registry.deregister({ space, digest, cause }) assert.ok(dereg.error) assert.equal(dereg.error?.name, EntryNotFound.name) }, @@ -155,7 +156,12 @@ export const test = { const find0 = await registry.find(space, digest) assert.ok(find0.ok) - const dereg = await registry.deregister(space, digest) + const deregCause = await randomCID() + const dereg = await registry.deregister({ + space, + digest, + cause: deregCause, + }) assert.ok(dereg.ok) const find1 = await registry.find(space, digest) diff --git a/packages/upload-api/test/storage/blob-registry.js b/packages/upload-api/test/storage/blob-registry.js index a843aea2..2961856a 100644 --- a/packages/upload-api/test/storage/blob-registry.js +++ b/packages/upload-api/test/storage/blob-registry.js @@ -29,7 +29,8 @@ export class Registry { } /** @type {API.BlobAPI.Registry['deregister']} */ - async deregister(space, digest) { + async deregister({ space, digest, cause }) { + // `cause` is unused in this function but required in production for recording the space usage delta. const entries = this.data.get(space) ?? [] const entry = entries.find((e) => equals(e.blob.digest.bytes, digest.bytes)) if (!entry) return error(new EntryNotFound()) diff --git a/packages/upload-api/test/storage/provisions-storage.js b/packages/upload-api/test/storage/provisions-storage.js index 169513b1..9420548c 100644 --- a/packages/upload-api/test/storage/provisions-storage.js +++ b/packages/upload-api/test/storage/provisions-storage.js @@ -16,7 +16,7 @@ export class ProvisionsStorage { * * @param {Array} providers */ - constructor(providers = ['did:web:test.upload.storacha.network']) { + constructor(providers = ['did:web:test.up.storacha.network']) { /** * @type {Record} */ diff --git a/packages/upload-api/test/util.js b/packages/upload-api/test/util.js index 3530eef6..3830924c 100644 --- a/packages/upload-api/test/util.js +++ b/packages/upload-api/test/util.js @@ -29,7 +29,7 @@ export const service = ed25519 .parse( 'MgCYKXoHVy7Vk4/QjcEGi+MCqjntUiasxXJ8uJKY0qh11e+0Bs8WsdqGK7xothgrDzzWD0ME7ynPjz2okXDh8537lId8=' ) - .withDID('did:web:test.upload.storacha.network') + .withDID('did:web:test.up.storacha.network') /** * @param {import('@ucanto/interface').Principal} audience diff --git a/packages/upload-client/CHANGELOG.md b/packages/upload-client/CHANGELOG.md index 803e29bc..d172a85f 100644 --- a/packages/upload-client/CHANGELOG.md +++ b/packages/upload-client/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [1.0.5](https://github.com/storacha/upload-service/compare/upload-client-v1.0.4...upload-client-v1.0.5) (2025-02-11) + + +### Fixes + +* use correct object in cause ([#140](https://github.com/storacha/upload-service/issues/140)) ([372f839](https://github.com/storacha/upload-service/commit/372f8391e3385cc7f810d31e6de852d6d1100688)) +* use up.storacha.network ([#144](https://github.com/storacha/upload-service/issues/144)) ([ac6b5b4](https://github.com/storacha/upload-service/commit/ac6b5b4b9881f9889e99e18b38fbfb302b4fb3b5)) + ## [1.0.4](https://github.com/storacha/upload-service/compare/upload-client-v1.0.3...upload-client-v1.0.4) (2025-01-22) diff --git a/packages/upload-client/package.json b/packages/upload-client/package.json index 76cd1dd5..eff91c02 100644 --- a/packages/upload-client/package.json +++ b/packages/upload-client/package.json @@ -1,6 +1,6 @@ { "name": "@storacha/upload-client", - "version": "1.0.4", + "version": "1.0.5", "description": "The storacha.network upload client", "homepage": "https://storacha.network", "repository": { diff --git a/packages/upload-client/src/blob/add.js b/packages/upload-client/src/blob/add.js index f60fccf3..1f0321bd 100644 --- a/packages/upload-client/src/blob/add.js +++ b/packages/upload-client/src/blob/add.js @@ -297,7 +297,7 @@ export async function add( throw new Error( `failed ${UCAN.conclude.can} for ${HTTPCapabilities.put.can} invocation`, { - cause: result.out.error, + cause: ucanConclude.out.error, } ) } diff --git a/packages/upload-client/src/service.js b/packages/upload-client/src/service.js index ca8f27b8..ce73a749 100644 --- a/packages/upload-client/src/service.js +++ b/packages/upload-client/src/service.js @@ -2,9 +2,9 @@ import { connect } from '@ucanto/client' import { CAR, HTTP } from '@ucanto/transport' import * as DID from '@ipld/dag-ucan/did' -export const serviceURL = new URL('https://upload.storacha.network') -export const servicePrincipal = DID.parse('did:web:upload.storacha.network') -export const receiptsEndpoint = 'https://upload.storacha.network/receipt/' +export const serviceURL = new URL('https://up.storacha.network') +export const servicePrincipal = DID.parse('did:web:up.storacha.network') +export const receiptsEndpoint = 'https://up.storacha.network/receipt/' /** @type {import('@ucanto/interface').ConnectionView} */ export const connection = connect({ diff --git a/packages/w3up-client/CHANGELOG.md b/packages/w3up-client/CHANGELOG.md index cc01577c..c80f7bc9 100644 --- a/packages/w3up-client/CHANGELOG.md +++ b/packages/w3up-client/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [1.1.5](https://github.com/storacha/upload-service/compare/client-v1.1.4...client-v1.1.5) (2025-02-11) + + +### Fixes + +* use up.storacha.network ([#144](https://github.com/storacha/upload-service/issues/144)) ([ac6b5b4](https://github.com/storacha/upload-service/commit/ac6b5b4b9881f9889e99e18b38fbfb302b4fb3b5)) + ## [1.1.4](https://github.com/storacha/upload-service/compare/client-v1.1.3...client-v1.1.4) (2025-01-22) diff --git a/packages/w3up-client/package.json b/packages/w3up-client/package.json index d22b6e31..e9c29f18 100644 --- a/packages/w3up-client/package.json +++ b/packages/w3up-client/package.json @@ -1,6 +1,6 @@ { "name": "@storacha/client", - "version": "1.1.4", + "version": "1.1.5", "description": "Client for the storacha.network w3up api", "license": "Apache-2.0 OR MIT", "type": "module", diff --git a/packages/w3up-client/src/service.js b/packages/w3up-client/src/service.js index 41bdec60..e0ae1de1 100644 --- a/packages/w3up-client/src/service.js +++ b/packages/w3up-client/src/service.js @@ -3,10 +3,8 @@ import { CAR, HTTP } from '@ucanto/transport' import * as DID from '@ipld/dag-ucan/did' import { receiptsEndpoint } from '@storacha/upload-client' -export const accessServiceURL = new URL('https://upload.storacha.network') -export const accessServicePrincipal = DID.parse( - 'did:web:upload.storacha.network' -) +export const accessServiceURL = new URL('https://up.storacha.network') +export const accessServicePrincipal = DID.parse('did:web:up.storacha.network') export const accessServiceConnection = client.connect({ id: accessServicePrincipal, @@ -14,10 +12,8 @@ export const accessServiceConnection = client.connect({ channel: HTTP.open({ url: accessServiceURL, method: 'POST' }), }) -export const uploadServiceURL = new URL('https://upload.storacha.network') -export const uploadServicePrincipal = DID.parse( - 'did:web:upload.storacha.network' -) +export const uploadServiceURL = new URL('https://up.storacha.network') +export const uploadServicePrincipal = DID.parse('did:web:up.storacha.network') export const uploadServiceConnection = client.connect({ id: uploadServicePrincipal, @@ -25,10 +21,8 @@ export const uploadServiceConnection = client.connect({ channel: HTTP.open({ url: accessServiceURL, method: 'POST' }), }) -export const filecoinServiceURL = new URL('https://upload.storacha.network') -export const filecoinServicePrincipal = DID.parse( - 'did:web:upload.storacha.network' -) +export const filecoinServiceURL = new URL('https://up.storacha.network') +export const filecoinServicePrincipal = DID.parse('did:web:up.storacha.network') export const filecoinServiceConnection = client.connect({ id: filecoinServicePrincipal, diff --git a/packages/w3up-client/test/client.test.js b/packages/w3up-client/test/client.test.js index e7f8873b..d6c89c50 100644 --- a/packages/w3up-client/test/client.test.js +++ b/packages/w3up-client/test/client.test.js @@ -834,7 +834,7 @@ export const testClient = { defaultProvider: { 'should return the connection ID': async (assert) => { const alice = new Client(await AgentData.create()) - assert.equal(alice.defaultProvider(), 'did:web:upload.storacha.network') + assert.equal(alice.defaultProvider(), 'did:web:up.storacha.network') }, }, diff --git a/packages/w3up-client/test/coupon.test.js b/packages/w3up-client/test/coupon.test.js index c5cefb70..7156696a 100644 --- a/packages/w3up-client/test/coupon.test.js +++ b/packages/w3up-client/test/coupon.test.js @@ -16,10 +16,7 @@ export const testCoupon = Test.withContext({ const account = await login // Then we setup a billing for this account - await plansStorage.set( - account.did(), - 'did:web:test.upload.storacha.network' - ) + await plansStorage.set(account.did(), 'did:web:test.up.storacha.network') // Then we use the account to issue a coupon for the workshop const coupon = await client.coupon.issue({ @@ -50,7 +47,7 @@ export const testCoupon = Test.withContext({ const info = await alice.capability.space.info(space.did()) assert.deepEqual(info.did, space.did()) - assert.deepEqual(info.providers, ['did:web:test.upload.storacha.network']) + assert.deepEqual(info.providers, ['did:web:test.up.storacha.network']) }, 'coupon with password': async ( diff --git a/scripts/mkdelegate.js b/scripts/mkdelegate.js index fb1f2ba1..f5dc7563 100644 --- a/scripts/mkdelegate.js +++ b/scripts/mkdelegate.js @@ -12,7 +12,7 @@ import { base64 } from 'multiformats/bases/base64' import * as DID from '@ipld/dag-ucan/did' const indexingServiceDID = 'did:web:staging.indexer.storacha.network' -const uploadServiceDID = 'did:web:staging.upload.storacha.network' +const uploadServiceDID = 'did:web:staging.up.storacha.network' const storageProviderDID = 'did:key:...' if (!process.argv[2]) {