Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(access-client): cli and recover #207

Merged
merged 12 commits into from
Dec 5, 2022
Prev Previous commit
Next Next commit
chore: feedback
  • Loading branch information
hugomrdias committed Dec 5, 2022
commit 0892e0dd0ab6f088900e785fe90fc27e9ba88a41
1 change: 0 additions & 1 deletion packages/access-api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@
"dotenv": "^16.0.3",
"esbuild": "^0.15.16",
"git-rev-sync": "^3.0.2",
"globby": "^13.1.2",
"hd-scripts": "^3.0.2",
"is-subset": "^0.1.1",
"miniflare": "^2.11.0",
Expand Down
15 changes: 9 additions & 6 deletions packages/access-api/scripts/migrate.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import split from '@databases/split-sql-query'
import sql from '@databases/sql'
import path from 'path'
import { fileURLToPath } from 'url'
import { globbySync } from 'globby'
import fs from 'fs'

const __dirname = path.dirname(fileURLToPath(import.meta.url))

Expand All @@ -12,20 +12,23 @@ const sqliteFormat = {
formatValue: (_, __) => ({ placeholder: '', value: '' }),
}

const files = globbySync(`${__dirname}/../migrations/*`)
const migrations = files.map((f) => sql.file(f))
// const files = globbySync(`${__dirname}/../migrations/*`)
const dir = path.resolve(`${__dirname}/../migrations`)

const files = fs.readdirSync(dir)
const migrations = files.map((f) => sql.file(path.join(dir, f)))

/**
* Migrate from migration files
*
* @param {D1Database} db
*/
export async function migrate(db) {
const runnedMigrations = /** @type {number} */ (
const appliedMigrations = /** @type {number} */ (
await db.prepare('PRAGMA user_version').first('user_version')
)

migrations.splice(0, runnedMigrations)
migrations.splice(0, appliedMigrations)
const remaining = migrations.length
for (const m of migrations) {
/** @type {import('@databases/sql').SQLQuery[]} */
Expand All @@ -38,7 +41,7 @@ export async function migrate(db) {
)

await db
.prepare(`PRAGMA user_version = ${runnedMigrations + remaining}`)
.prepare(`PRAGMA user_version = ${appliedMigrations + remaining}`)
.all()
}
}
2 changes: 1 addition & 1 deletion packages/access-api/test/space-info.test.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import * as Space from '@web3-storage/access/capabilities/space'
import * as Space from '@web3-storage/capabilities/space'
import assert from 'assert'
import { context } from './helpers/context.js'
import { createSpace } from './helpers/utils.js'
Expand Down
3 changes: 2 additions & 1 deletion packages/access-api/test/space-recover.test.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import * as Space from '@web3-storage/access/capabilities/space'
import * as Space from '@web3-storage/capabilities/space'
import { stringToDelegation } from '@web3-storage/access/encoding'
import pWaitFor from 'p-wait-for'
import assert from 'assert'
Expand Down Expand Up @@ -73,6 +73,7 @@ describe('space-recover', function () {

assert(html.includes(encoded))

// @ts-ignore
const validations = new Validations(await mf.getKVNamespace('VALIDATIONS'))
const recoverEncoded =
/** @type {import('@web3-storage/access/types').EncodedDelegation<[import('@web3-storage/access/capabilities/types').SpaceRecover]>} */ (
Expand Down
17 changes: 0 additions & 17 deletions packages/access-client/src/agent.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,23 +25,6 @@ import {

const HOST = 'https://access.web3.storage'

/** @type {import('./types').Abilities[]} */
export const abilitiesAsStrings = [
'*',
'space/*',
'space/info',
'space/recover',
'space/recover-validation',
'store/*',
'store/add',
'store/list',
'store/remove',
'upload/*',
'upload/add',
'upload/list',
'upload/remove',
]

/**
* Creates a Ucanto connection for the w3access API
*
Expand Down
3 changes: 2 additions & 1 deletion packages/access-client/src/cli/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ import { cmdLink } from './cmd-link.js'
import { cmdSetup } from './cmd-setup.js'
import { cmdWhoami } from './cmd-whoami.js'
import { StoreConf } from '../stores/store-conf.js'
import { abilitiesAsStrings, Agent } from '../agent.js'
import { Agent } from '../agent.js'
import { abilitiesAsStrings } from '@web3-storage/capabilities'
import { delegationToString, stringToDelegation } from '../encoding.js'
import inquirer from 'inquirer'
import { Verifier } from '@ucanto/principal'
Expand Down
1 change: 1 addition & 0 deletions packages/capabilities/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@
"hd-scripts": "^3.0.2",
"mocha": "^10.1.0",
"playwright-test": "^8.1.1",
"type-fest": "^3.3.0",
"typescript": "4.8.4",
"watch": "^1.0.2"
},
Expand Down
19 changes: 19 additions & 0 deletions packages/capabilities/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,22 @@ export * as Store from './store.js'
export * as Upload from './upload.js'
export * as Voucher from './voucher.js'
export * as Utils from './utils.js'

/** @type {import('./types').AbilitiesArray} */
export const abilitiesAsStrings = [
'*',
'space/*',
'space/info',
'space/recover',
'space/recover-validation',
'upload/*',
'upload/add',
'upload/remove',
'upload/list',
'store/*',
'store/add',
'store/remove',
'store/list',
'voucher/claim',
'voucher/redeem',
hugomrdias marked this conversation as resolved.
Show resolved Hide resolved
]
36 changes: 20 additions & 16 deletions packages/capabilities/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { top } from './top.js'
import { add, list, remove, store } from './store.js'
import * as UploadCaps from './upload.js'
import { claim, redeem } from './voucher.js'
import type { TupleToUnion } from 'type-fest'

// Space
export type Space = InferInvokedCapability<typeof space>
Expand All @@ -29,19 +30,22 @@ export type StoreList = InferInvokedCapability<typeof list>
// Top
export type Top = InferInvokedCapability<typeof top>

export type Abilities =
| Space['can']
| SpaceInfo['can']
| SpaceRecover['can']
| SpaceRecoverValidation['can']
| VoucherClaim['can']
| VoucherRedeem['can']
| Upload['can']
| UploadAdd['can']
| UploadRemove['can']
| UploadList['can']
| Store['can']
| StoreAdd['can']
| StoreRemove['can']
| StoreList['can']
| Top['can']
export type Abilities = TupleToUnion<AbilitiesArray>

export type AbilitiesArray = [
Top['can'],
Space['can'],
SpaceInfo['can'],
SpaceRecover['can'],
SpaceRecoverValidation['can'],
Upload['can'],
UploadAdd['can'],
UploadRemove['can'],
UploadList['can'],
Store['can'],
StoreAdd['can'],
StoreRemove['can'],
StoreList['can'],
VoucherClaim['can'],
VoucherRedeem['can']
]
Loading