@blocklet/store 1.17.8-beta-20260119-034126-467341b7 → 1.17.8-beta-20260121-102603-f9d0176f
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/dist/index.cjs +1 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.mjs +1 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +6 -6
package/dist/index.cjs
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/utils/request.ts","../src/utils/fetch-configs.ts","../src/utils/base-wrap-spinner.ts","../src/create-connect.ts","../src/utils/get-payment-share.ts","../src/utils/replace-origin.ts","../src/utils/sign.ts","../src/utils/verify-bundle-size.ts","../src/upload.ts"],"sourcesContent":["import axios from '@abtnode/util/lib/axios';\n\nexport function request(options: Record<string, unknown>) {\n return axios({\n maxContentLength: Number.POSITIVE_INFINITY,\n maxBodyLength: Number.POSITIVE_INFINITY,\n ...options,\n });\n}\n","import { joinURL, withQuery } from 'ufo';\nimport pWaitFor from 'p-wait-for';\nimport { request } from './request';\n\nexport const fetchConfigs = async ({\n connectUrl,\n sessionId,\n fetchInterval,\n fetchTimeout,\n connectAction,\n}: {\n connectUrl: string;\n sessionId: string;\n fetchInterval: number;\n fetchTimeout: number;\n connectAction: string;\n}) => {\n const ENDPOINT_CHECK_SESSION = `/api/did/${connectAction}/status`;\n const ENDPOINT_INVALIDATE_SESSION = `/api/did/${connectAction}/timeout`;\n\n const fetchSessionStatus = async () => {\n const url = withQuery(joinURL(connectUrl, ENDPOINT_CHECK_SESSION), { _t_: sessionId });\n\n const { data } = await request({\n url,\n method: 'GET',\n timeout: fetchTimeout,\n });\n return data;\n };\n\n const condition = async () => {\n const { status, error } = await fetchSessionStatus();\n if (status === 'error' || !!error) {\n throw new Error(error);\n }\n return status === 'succeed';\n };\n\n try {\n await pWaitFor(condition, { interval: fetchInterval, timeout: fetchTimeout });\n const { config } = await fetchSessionStatus();\n return config;\n } catch (e) {\n const err = e as Error;\n // cli 侧超时后销毁 sessionId, 保证 cli 端与 store 端状态一致\n if (err.name === 'TimeoutError') {\n await request({\n url: withQuery(joinURL(connectUrl, ENDPOINT_INVALIDATE_SESSION), {\n _t_: sessionId,\n }),\n method: 'GET',\n timeout: fetchTimeout,\n });\n }\n throw err;\n }\n};\n","export function baseWrapSpinner(_: string, waiting: () => Promise<unknown>) {\n return Promise.resolve(waiting());\n}\n","import { encodeEncryptionKey } from '@abtnode/util/lib/security';\nimport get from 'lodash/get';\nimport tweetnacl from 'tweetnacl';\nimport SealedBox from 'tweetnacl-sealedbox-js';\nimport { joinURL, withQuery } from 'ufo';\nimport { request } from './utils/request';\nimport { fetchConfigs } from './utils/fetch-configs';\nimport { baseWrapSpinner } from './utils/base-wrap-spinner';\n\ninterface CreateConnectOptions {\n connectUrl?: string;\n openPage?: (url: string) => void;\n fetchTimeout?: number;\n fetchInterval?: number;\n retry?: number;\n source?: string;\n connectAction?: string;\n enableEncrypt?: boolean;\n wrapSpinner?: typeof baseWrapSpinner;\n projectId?: string;\n monikers?: string;\n userDid?: string;\n prettyUrl?: (url: string) => string;\n closeOnSuccess?: boolean;\n}\n\nexport async function createConnect({\n connectUrl = 'https://store.blocklet.dev',\n openPage,\n fetchTimeout = 30 * 1000,\n fetchInterval = 3 * 1000,\n retry = 1500,\n source = 'Blocklet CLI',\n connectAction = 'connect-cli',\n wrapSpinner = baseWrapSpinner,\n projectId,\n userDid,\n enableEncrypt = false,\n closeOnSuccess,\n monikers,\n prettyUrl,\n ...restParams\n}: CreateConnectOptions = {}) {\n const ENDPOINT_CREATE_SESSION = `/api/did/${connectAction}/token`;\n const DID_CONNECT_URL = `/${connectAction}`;\n\n const keyPair = tweetnacl.box.keyPair();\n const decrypt = (value: string) => {\n const decrypted = SealedBox.open(\n Uint8Array.from(Buffer.from(value, 'base64')),\n keyPair.publicKey,\n keyPair.secretKey,\n );\n return JSON.parse(Buffer.from(decrypted).toString('utf8'));\n };\n const BLOCKLET_JSON_PATH = '__blocklet__.js?type=json';\n let masterSite;\n try {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n const { data: blocklet } = await request({\n url: joinURL(connectUrl, BLOCKLET_JSON_PATH),\n method: 'GET',\n timeout: fetchTimeout,\n });\n\n if (blocklet?.settings?.federated?.config?.status === 'approved') {\n masterSite = blocklet?.settings?.federated?.master;\n }\n } catch {\n /* empty */\n }\n\n try {\n const mergeParams = {\n _ek_: encodeEncryptionKey(keyPair.publicKey),\n sourceAppPid: masterSite?.appPid || undefined,\n projectId,\n userDid,\n monikers,\n source,\n ...restParams,\n };\n\n // 创建会话 & 拼接 connect url & 打开 connect-url 页面\n const connectInfo = new URL(connectUrl);\n const res = await request({\n url: joinURL(connectUrl, ENDPOINT_CREATE_SESSION),\n params: mergeParams, // for sensitive info encryption\n method: 'GET',\n timeout: fetchTimeout,\n headers: {\n 'x-real-port': connectInfo.port,\n 'x-real-hostname': connectInfo.hostname,\n 'x-real-protocol': connectInfo.protocol,\n },\n });\n const { url, token } = res.data;\n const pageUrl = withQuery(joinURL(connectUrl, DID_CONNECT_URL), {\n __connect_url__: encodeEncryptionKey(url),\n source,\n closeOnSuccess,\n });\n // NOTICE: 这个 console 是用于打印打开的 url,需要保留,不要删除\n // eslint-disable-next-line no-console\n console.info(\n 'If browser does not open automatically, please open the following link in your browser: ',\n prettyUrl?.(pageUrl) || pageUrl,\n );\n openPage?.(pageUrl);\n\n // 等待认证完成并获取配置信息\n return await wrapSpinner(`Waiting for connection: ${connectUrl}`, async () => {\n const fetchData = await fetchConfigs({\n connectUrl,\n sessionId: token,\n connectAction,\n fetchTimeout: retry * fetchInterval,\n fetchInterval: retry,\n });\n const decryptData = enableEncrypt && fetchData ? decrypt(fetchData) : fetchData;\n return decryptData;\n });\n } catch (e) {\n const err = e as Error;\n const response = get(err, 'response') as unknown as Record<string, string>;\n let errorMessage: string;\n if (response) {\n errorMessage = get(response, 'data.error', response.statusText) || '';\n errorMessage = `[${response.status}] ${errorMessage}`;\n } else {\n errorMessage = err.message;\n }\n throw new Error(`failed to connect to store (${errorMessage})`);\n }\n}\n","/* eslint-disable no-await-in-loop */\nimport { joinURL } from 'ufo';\nimport cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport axios from '@abtnode/util/lib/axios';\nimport Client from '@ocap/client';\nimport { BLOCKLET_STORE_META_PATH } from '@abtnode/constant';\nimport { BLOCKLET_FACTORY_SHARES } from '@blocklet/constant';\nimport { createNftFactoryItx } from '@blocklet/meta/lib/payment/v2';\nimport { TBlockletMeta } from '@blocklet/meta/lib/types';\n\nexport interface Share {\n name: string;\n address: string;\n share: string;\n price: string;\n value: string;\n}\n\nconst getStoreInfo = async (url: string) => {\n const { data } = await axios.get(joinURL(url, BLOCKLET_STORE_META_PATH), { timeout: 20 * 1000 });\n return data;\n};\n\nexport const isValidChainEndpoint = async (endpoint: string) => {\n if (!endpoint) {\n return false;\n }\n\n const client = new Client(endpoint);\n try {\n const { info } = await client.getChainInfo();\n if (info.consensusVersion.split(' ').length === 2) {\n return client;\n }\n\n return false;\n } catch (err) {\n return false;\n }\n};\n\nexport const getShare = async ({\n meta,\n storeUrl,\n developerDid,\n}: {\n meta: Record<string, string>;\n storeUrl: string;\n developerDid: string;\n}) => {\n const info = await getStoreInfo(storeUrl);\n\n const shares = cloneDeep(get(meta, 'payment.share', [])) as Pick<Share, 'name' | 'address' | 'value'>[];\n if (shares.length === 0) {\n shares.push({\n name: 'developer',\n address: developerDid,\n value: BLOCKLET_FACTORY_SHARES.developer as unknown as string,\n });\n }\n if (!shares.find(x => x.address === info.id)) {\n shares.push({\n name: 'store',\n address: info.id,\n value: BLOCKLET_FACTORY_SHARES.store as unknown as string,\n });\n }\n\n return shares;\n};\n\n/**\n * Ensure NFT factory exists for paid blocklets, the process must be deterministic.\n * If user changed the name/title of the blocklet, then a new factory will be created\n */\nexport const ensureBlockletNftFactory = async ({\n meta,\n storeUrl,\n}: {\n meta: Record<string, string>;\n storeUrl: string;\n}) => {\n const info = await getStoreInfo(storeUrl);\n const endpoint = info.chainHost;\n\n const ocapClient = await isValidChainEndpoint(endpoint);\n if (ocapClient === false) {\n throw new Error('Invalid chain endpoint fetched from store, please contact store administrator to fix');\n }\n\n // create factory nft itx\n const { itx } = await createNftFactoryItx({\n blockletMeta: meta as unknown as TBlockletMeta,\n ocapClient,\n issuers: [info.id],\n storeUrl,\n });\n\n return itx.address;\n};\n","export function replaceOrigin(originalUrl: string, newUrl: string) {\n try {\n const originalUrlObj = new URL(originalUrl);\n const newUrlObj = new URL(newUrl, originalUrlObj.origin);\n return originalUrl.replace(originalUrlObj.origin, newUrlObj.origin);\n } catch (error) {\n console.error('Invalid URL provided:', error);\n return originalUrl;\n }\n}\n","import { toBase58 } from '@ocap/util';\nimport type { WalletObject } from '@ocap/wallet';\nimport stableStringify from 'json-stable-stringify';\n\nexport interface BlockletMeta {\n name: string;\n version: string;\n did: string;\n status: string;\n}\n\ninterface Signature {\n type?: string;\n name: string;\n signer: string;\n pk: string;\n created: string;\n sig?: string;\n}\n\nexport const sign = async (blockletMeta: BlockletMeta, wallet: WalletObject<string>) => {\n const walletJSON = wallet.toJSON();\n\n const signatureData: Signature = {\n type: walletJSON.type.pk,\n name: blockletMeta.name,\n signer: walletJSON.address,\n pk: toBase58(walletJSON.pk),\n created: new Date().toISOString(),\n };\n\n const signature = await wallet.sign(stableStringify({ ...blockletMeta, signatures: [signatureData] }) ?? '');\n signatureData.sig = toBase58(signature);\n\n return signatureData;\n};\n","import axios from '@abtnode/util/lib/axios';\nimport xbytes from 'xbytes';\nimport fs from 'fs';\nimport path from 'path';\n\nexport const verifyBundleSize = async ({\n storeUrl,\n tarballFilePath,\n}: {\n storeUrl: string;\n tarballFilePath: string;\n}) => {\n const { data: storeJson } = await axios({\n url: `${storeUrl}/api/store.json`,\n }).catch(() => {\n return {};\n });\n\n if (xbytes.isBytes(storeJson?.maxBundleSize) && fs.existsSync(tarballFilePath)) {\n const { size: tarballFileBytes } = fs.statSync(tarballFilePath);\n const maxBundleBytes = xbytes.parseSize(storeJson.maxBundleSize);\n if (tarballFileBytes > maxBundleBytes) {\n throw new Error(\n `The release file ${path.basename(tarballFilePath)} size cannot exceed ${storeJson.maxBundleSize}`,\n );\n }\n }\n};\n","import axios from '@abtnode/util/lib/axios';\nimport { isValid, toTypeInfo, types } from '@arcblock/did';\nimport { checkFreeBlocklet } from '@blocklet/meta/lib/payment/v2';\nimport { isFreeBlocklet } from '@blocklet/meta/lib/util';\nimport { getBlockletMetaFromUrls, getSourceUrlsFromConfig } from '@blocklet/meta/lib/util-meta';\nimport { fromSecretKey } from '@ocap/wallet';\nimport FormData from 'form-data';\nimport fs from 'fs-extra';\nimport yaml from 'js-yaml';\nimport get from 'lodash/get';\nimport pAll from 'p-all';\nimport path from 'path';\nimport { joinURL } from 'ufo';\n\nimport { createRelease } from '@abtnode/util/lib/create-blocklet-release';\nimport { baseWrapSpinner } from './utils/base-wrap-spinner';\nimport { Share, ensureBlockletNftFactory, getShare } from './utils/get-payment-share';\nimport { replaceOrigin } from './utils/replace-origin';\nimport { BlockletMeta, sign } from './utils/sign';\nimport { verifyBundleSize } from './utils/verify-bundle-size';\n\nexport interface UploadOptions {\n storeUrl: string;\n accessToken: string;\n developerDid: string;\n possibleSameStore?: boolean;\n metaFile: string;\n source: string;\n wrapSpinner?: typeof baseWrapSpinner;\n printSuccess: (...args: unknown[]) => void;\n printTar: (meta: unknown, metaPath: string) => Promise<void>;\n debug: (...args: unknown[]) => void;\n}\n\ninterface Source {\n name?: string;\n store?: string;\n version?: string;\n url?: string;\n}\n\nexport async function upload({\n storeUrl,\n accessToken,\n developerDid,\n metaFile,\n source,\n possibleSameStore,\n wrapSpinner = baseWrapSpinner,\n printSuccess = () => {},\n printTar = async () => {},\n debug = () => {},\n}: UploadOptions): Promise<BlockletMeta | undefined> {\n if (!fs.existsSync(metaFile)) {\n throw new Error(`Invalid release meta file ${metaFile} not exists`);\n }\n const meta = fs.readJSONSync(metaFile);\n const releaseReleaseDir = path.resolve(metaFile, '..', '..', 'bundle');\n if (possibleSameStore && meta.components) {\n const parseSource = async (component: { name: string; source?: Source }) => {\n try {\n const nextComponent = { ...component };\n if (nextComponent.source) {\n nextComponent.source = { ...nextComponent.source };\n if (nextComponent.source.url) {\n nextComponent.source.url = replaceOrigin(nextComponent.source.url, storeUrl);\n const res = await axios.get(nextComponent.source.url);\n return res?.data?.did ? nextComponent : component;\n }\n nextComponent.source.store = storeUrl;\n } else {\n nextComponent.source = { name: component.name, store: storeUrl, version: 'latest' };\n }\n const urls = getSourceUrlsFromConfig(nextComponent);\n await getBlockletMetaFromUrls(urls, {\n returnUrl: false,\n validateFn: () => true,\n ensureTarball: false,\n });\n return nextComponent;\n } catch (err) {\n // console.error(`Failed to get meta ${component.name} from ${storeUrl}`, err);\n return component;\n }\n };\n const events = meta.components.map((component: { name: string; source?: Source }) => {\n return () => parseSource(component);\n });\n meta.components = await pAll(events, { concurrency: 4 });\n\n // update yaml\n const yamlFile = path.join(releaseReleaseDir, 'blocklet.yml');\n const metaYaml = yaml.load(fs.readFileSync(yamlFile).toString(), { json: true }) as Record<string, unknown>;\n metaYaml.components = meta.components;\n if (meta.engine && meta.engine?.source?.store) {\n meta.engine = await parseSource({ ...meta.engine });\n metaYaml.engine = meta.engine;\n }\n fs.writeFileSync(yamlFile, yaml.dump(metaYaml, { sortKeys: false, skipInvalid: true }));\n\n // create release\n const dir = path.resolve(metaFile, '..', '..');\n const release = await createRelease(dir, {\n printError: (err: Error) => {\n throw err;\n },\n printInfo: () => {},\n tarball: meta.dist.tarball,\n });\n\n meta.dist.integrity = release.meta.dist.integrity;\n meta.dist.size = release.meta.dist.size;\n }\n // convert meta.charging -> meta.payment\n if (meta.payment === undefined) {\n const { charging } = meta;\n const payment = {} as Record<string, unknown>;\n if (charging && Array.isArray(charging.tokens)) {\n payment.price = charging.tokens.map((x: Share) => ({\n address: x.address,\n value: x.price,\n }));\n }\n if (charging && Array.isArray(charging.shares)) {\n payment.share = charging.shares.map((x: Share) => ({\n name: x.name,\n address: x.address,\n value: x.share,\n }));\n }\n meta.payment = payment;\n delete meta.charging;\n }\n\n const { tarball } = meta.dist;\n const tarballFilePath = path.join(path.dirname(metaFile), tarball);\n await verifyBundleSize({ storeUrl, tarballFilePath });\n\n const wallet = fromSecretKey(accessToken);\n\n if (!wallet) {\n throw new Error(\n `[NO-ACCESS] Blocklet store accessToken is used to authorize developers when uploading blocklets, you can generate your own accessToken from ${storeUrl}`,\n );\n }\n\n if (isFreeBlocklet(meta) === false) {\n // check for developer did\n if (!developerDid || isValid(developerDid) === false) {\n throw new Error(\n `developerDid is required to upload a paid blocklet, please get your developerDid from ${storeUrl}`,\n );\n }\n\n // create nft factory address if the blocklet requires payment\n try {\n const typeInfo = toTypeInfo(meta.did);\n const isNewDid = typeInfo.role === types.RoleType.ROLE_BLOCKLET;\n // new did mode: share payment to blocklet-did\n // old did mode: share payment to developer-did\n meta.payment.share = await getShare({ meta, storeUrl, developerDid: isNewDid ? meta.did : developerDid });\n const nftFactory = await ensureBlockletNftFactory({ meta, storeUrl });\n meta.nftFactory = nftFactory;\n printSuccess(`NFT Factory for ${meta.name}: ${nftFactory}`);\n } catch (err) {\n throw new Error(`Can not determine NFT factory for ${meta.name}: ${err.message}`);\n }\n } else {\n await checkFreeBlocklet(meta);\n }\n\n const signature = await sign(meta, wallet);\n meta.signatures = [signature];\n\n printSuccess('Blocklet release signed successfully, signature:', signature.sig);\n\n await printTar(meta, tarballFilePath);\n\n const data = new FormData();\n data.append('blocklet-meta', Buffer.from(JSON.stringify(meta)), { filename: path.basename(metaFile) });\n data.append('blocklet-tarball', fs.readFileSync(tarballFilePath), { filename: path.basename(tarballFilePath) });\n data.append('source', source);\n\n let uploadResult: { data?: { status: string } } = {};\n try {\n await wrapSpinner(`Uploading ${meta.name}@${meta.version}...`, async () => {\n uploadResult = await axios({\n url: joinURL(storeUrl, '/api/blocklets/upload'),\n method: 'POST',\n data,\n headers: {\n ...data.getHeaders(),\n 'blocklet-version': meta.version,\n 'blocklet-did': meta.did,\n },\n timeout: 30 * 60 * 1000, // 30 minutes\n maxContentLength: Number.POSITIVE_INFINITY,\n maxBodyLength: Number.POSITIVE_INFINITY,\n });\n });\n debug('Upload result:', uploadResult.data);\n } catch (err) {\n if (err.response) {\n const errorMessage = get(err.response, 'data.error', err.response.statusText);\n throw new Error(`Upload failed with error: [${err.response.status}] \\n${errorMessage}\\n`);\n }\n\n throw new Error(`Upload failed with error: ${err.message}`);\n }\n\n return { ...meta, status: uploadResult.data?.status || '' };\n}\n"],"names":["axios","withQuery","joinURL","pWaitFor","tweetnacl","SealedBox","encodeEncryptionKey","get","BLOCKLET_STORE_META_PATH","Client","cloneDeep","BLOCKLET_FACTORY_SHARES","createNftFactoryItx","toBase58","stableStringify","xbytes","fs","path","getSourceUrlsFromConfig","getBlockletMetaFromUrls","pAll","yaml","createRelease","wallet","fromSecretKey","isFreeBlocklet","isValid","toTypeInfo","types","checkFreeBlocklet","FormData"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/utils/request.ts","../src/utils/fetch-configs.ts","../src/utils/base-wrap-spinner.ts","../src/create-connect.ts","../src/utils/get-payment-share.ts","../src/utils/replace-origin.ts","../src/utils/sign.ts","../src/utils/verify-bundle-size.ts","../src/upload.ts"],"sourcesContent":["import axios from '@abtnode/util/lib/axios';\n\nexport function request(options: Record<string, unknown>) {\n return axios({\n maxContentLength: Number.POSITIVE_INFINITY,\n maxBodyLength: Number.POSITIVE_INFINITY,\n ...options,\n });\n}\n","import { joinURL, withQuery } from 'ufo';\nimport pWaitFor from 'p-wait-for';\nimport { request } from './request';\n\nexport const fetchConfigs = async ({\n connectUrl,\n sessionId,\n fetchInterval,\n fetchTimeout,\n connectAction,\n}: {\n connectUrl: string;\n sessionId: string;\n fetchInterval: number;\n fetchTimeout: number;\n connectAction: string;\n}) => {\n const ENDPOINT_CHECK_SESSION = `/api/did/${connectAction}/status`;\n const ENDPOINT_INVALIDATE_SESSION = `/api/did/${connectAction}/timeout`;\n\n const fetchSessionStatus = async () => {\n const url = withQuery(joinURL(connectUrl, ENDPOINT_CHECK_SESSION), { _t_: sessionId });\n\n const { data } = await request({\n url,\n method: 'GET',\n timeout: fetchTimeout,\n });\n return data;\n };\n\n const condition = async () => {\n const { status, error } = await fetchSessionStatus();\n if (status === 'error' || !!error) {\n throw new Error(error);\n }\n return status === 'succeed';\n };\n\n try {\n await pWaitFor(condition, { interval: fetchInterval, timeout: fetchTimeout });\n const { config } = await fetchSessionStatus();\n return config;\n } catch (e) {\n const err = e as Error;\n // cli 侧超时后销毁 sessionId, 保证 cli 端与 store 端状态一致\n if (err.name === 'TimeoutError') {\n await request({\n url: withQuery(joinURL(connectUrl, ENDPOINT_INVALIDATE_SESSION), {\n _t_: sessionId,\n }),\n method: 'GET',\n timeout: fetchTimeout,\n });\n }\n throw err;\n }\n};\n","export function baseWrapSpinner(_: string, waiting: () => Promise<unknown>) {\n return Promise.resolve(waiting());\n}\n","import { encodeEncryptionKey } from '@abtnode/util/lib/security';\nimport get from 'lodash/get';\nimport tweetnacl from 'tweetnacl';\nimport SealedBox from 'tweetnacl-sealedbox-js';\nimport { joinURL, withQuery } from 'ufo';\nimport { request } from './utils/request';\nimport { fetchConfigs } from './utils/fetch-configs';\nimport { baseWrapSpinner } from './utils/base-wrap-spinner';\n\ninterface CreateConnectOptions {\n connectUrl?: string;\n openPage?: (url: string) => void;\n fetchTimeout?: number;\n fetchInterval?: number;\n retry?: number;\n source?: string;\n connectAction?: string;\n enableEncrypt?: boolean;\n wrapSpinner?: typeof baseWrapSpinner;\n projectId?: string;\n monikers?: string;\n userDid?: string;\n prettyUrl?: (url: string) => string;\n closeOnSuccess?: boolean;\n}\n\nexport async function createConnect({\n connectUrl = 'https://store.blocklet.dev',\n openPage,\n fetchTimeout = 30 * 1000,\n fetchInterval = 3 * 1000,\n retry = 1500,\n source = 'Blocklet CLI',\n connectAction = 'connect-cli',\n wrapSpinner = baseWrapSpinner,\n projectId,\n userDid,\n enableEncrypt = false,\n closeOnSuccess,\n monikers,\n prettyUrl,\n ...restParams\n}: CreateConnectOptions = {}) {\n const ENDPOINT_CREATE_SESSION = `/api/did/${connectAction}/token`;\n const DID_CONNECT_URL = `/${connectAction}`;\n\n const keyPair = tweetnacl.box.keyPair();\n const decrypt = (value: string) => {\n const decrypted = SealedBox.open(\n Uint8Array.from(Buffer.from(value, 'base64')),\n keyPair.publicKey,\n keyPair.secretKey,\n );\n return JSON.parse(Buffer.from(decrypted).toString('utf8'));\n };\n const BLOCKLET_JSON_PATH = '__blocklet__.js?type=json';\n let masterSite;\n try {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n const { data: blocklet } = await request({\n url: joinURL(connectUrl, BLOCKLET_JSON_PATH),\n method: 'GET',\n timeout: fetchTimeout,\n });\n\n if (blocklet?.settings?.federated?.config?.status === 'approved') {\n masterSite = blocklet?.settings?.federated?.master;\n }\n } catch {\n /* empty */\n }\n\n try {\n const mergeParams = {\n _ek_: encodeEncryptionKey(keyPair.publicKey),\n sourceAppPid: masterSite?.appPid || undefined,\n projectId,\n userDid,\n monikers,\n source,\n ...restParams,\n };\n\n // 创建会话 & 拼接 connect url & 打开 connect-url 页面\n const connectInfo = new URL(connectUrl);\n const res = await request({\n url: joinURL(connectUrl, ENDPOINT_CREATE_SESSION),\n params: mergeParams, // for sensitive info encryption\n method: 'GET',\n timeout: fetchTimeout,\n headers: {\n 'x-real-port': connectInfo.port,\n 'x-real-hostname': connectInfo.hostname,\n 'x-real-protocol': connectInfo.protocol,\n },\n });\n const { url, token } = res.data;\n const pageUrl = withQuery(joinURL(connectUrl, DID_CONNECT_URL), {\n __connect_url__: encodeEncryptionKey(url),\n source,\n closeOnSuccess,\n });\n // NOTICE: 这个 console 是用于打印打开的 url,需要保留,不要删除\n // eslint-disable-next-line no-console\n console.info(\n 'If browser does not open automatically, please open the following link in your browser: ',\n prettyUrl?.(pageUrl) || pageUrl,\n );\n openPage?.(pageUrl);\n\n // 等待认证完成并获取配置信息\n return await wrapSpinner(`Waiting for connection: ${connectUrl}`, async () => {\n const fetchData = await fetchConfigs({\n connectUrl,\n sessionId: token,\n connectAction,\n fetchTimeout: retry * fetchInterval,\n fetchInterval: retry,\n });\n const decryptData = enableEncrypt && fetchData ? decrypt(fetchData) : fetchData;\n return decryptData;\n });\n } catch (e) {\n const err = e as Error;\n const response = get(err, 'response') as unknown as Record<string, string>;\n let errorMessage: string;\n if (response) {\n errorMessage = get(response, 'data.error', response.statusText) || '';\n errorMessage = `[${response.status}] ${errorMessage}`;\n } else {\n errorMessage = err.message;\n }\n throw new Error(`failed to connect to store (${errorMessage})`);\n }\n}\n","/* eslint-disable no-await-in-loop */\nimport { joinURL } from 'ufo';\nimport cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport axios from '@abtnode/util/lib/axios';\nimport Client from '@ocap/client';\nimport { BLOCKLET_STORE_META_PATH } from '@abtnode/constant';\nimport { BLOCKLET_FACTORY_SHARES } from '@blocklet/constant';\nimport { createNftFactoryItx } from '@blocklet/meta/lib/payment/v2';\nimport { TBlockletMeta } from '@blocklet/meta/lib/types';\n\nexport interface Share {\n name: string;\n address: string;\n share: string;\n price: string;\n value: string;\n}\n\nconst getStoreInfo = async (url: string) => {\n const { data } = await axios.get(joinURL(url, BLOCKLET_STORE_META_PATH), { timeout: 20 * 1000 });\n return data;\n};\n\nexport const isValidChainEndpoint = async (endpoint: string) => {\n if (!endpoint) {\n return false;\n }\n\n const client = new Client(endpoint);\n try {\n const { info } = await client.getChainInfo();\n if (info.consensusVersion.split(' ').length === 2) {\n return client;\n }\n\n return false;\n } catch (err) {\n return false;\n }\n};\n\nexport const getShare = async ({\n meta,\n storeUrl,\n developerDid,\n}: {\n meta: Record<string, string>;\n storeUrl: string;\n developerDid: string;\n}) => {\n const info = await getStoreInfo(storeUrl);\n\n const shares = cloneDeep(get(meta, 'payment.share', [])) as Pick<Share, 'name' | 'address' | 'value'>[];\n if (shares.length === 0) {\n shares.push({\n name: 'developer',\n address: developerDid,\n value: BLOCKLET_FACTORY_SHARES.developer as unknown as string,\n });\n }\n if (!shares.find(x => x.address === info.id)) {\n shares.push({\n name: 'store',\n address: info.id,\n value: BLOCKLET_FACTORY_SHARES.store as unknown as string,\n });\n }\n\n return shares;\n};\n\n/**\n * Ensure NFT factory exists for paid blocklets, the process must be deterministic.\n * If user changed the name/title of the blocklet, then a new factory will be created\n */\nexport const ensureBlockletNftFactory = async ({\n meta,\n storeUrl,\n}: {\n meta: Record<string, string>;\n storeUrl: string;\n}) => {\n const info = await getStoreInfo(storeUrl);\n const endpoint = info.chainHost;\n\n const ocapClient = await isValidChainEndpoint(endpoint);\n if (ocapClient === false) {\n throw new Error('Invalid chain endpoint fetched from store, please contact store administrator to fix');\n }\n\n // create factory nft itx\n const { itx } = await createNftFactoryItx({\n blockletMeta: meta as unknown as TBlockletMeta,\n ocapClient,\n issuers: [info.id],\n storeUrl,\n });\n\n return itx.address;\n};\n","export function replaceOrigin(originalUrl: string, newUrl: string) {\n try {\n const originalUrlObj = new URL(originalUrl);\n const newUrlObj = new URL(newUrl, originalUrlObj.origin);\n return originalUrl.replace(originalUrlObj.origin, newUrlObj.origin);\n } catch (error) {\n console.error('Invalid URL provided:', error);\n return originalUrl;\n }\n}\n","import { toBase58 } from '@ocap/util';\nimport type { WalletObject } from '@ocap/wallet';\nimport stableStringify from 'json-stable-stringify';\n\nexport interface BlockletMeta {\n name: string;\n version: string;\n did: string;\n status: string;\n}\n\ninterface Signature {\n type?: string;\n name: string;\n signer: string;\n pk: string;\n created: string;\n sig?: string;\n}\n\nexport const sign = async (blockletMeta: BlockletMeta, wallet: WalletObject<string>) => {\n const walletJSON = wallet.toJSON();\n\n const signatureData: Signature = {\n type: walletJSON.type.pk,\n name: blockletMeta.name,\n signer: walletJSON.address,\n pk: toBase58(walletJSON.pk),\n created: new Date().toISOString(),\n };\n\n const signature = await wallet.sign(stableStringify({ ...blockletMeta, signatures: [signatureData] }) ?? '');\n signatureData.sig = toBase58(signature);\n\n return signatureData;\n};\n","import axios from '@abtnode/util/lib/axios';\nimport xbytes from 'xbytes';\nimport fs from 'fs';\nimport path from 'path';\n\nexport const verifyBundleSize = async ({\n storeUrl,\n tarballFilePath,\n}: {\n storeUrl: string;\n tarballFilePath: string;\n}) => {\n const { data: storeJson } = await axios({\n url: `${storeUrl}/api/store.json`,\n }).catch(() => {\n return {};\n });\n\n if (xbytes.isBytes(storeJson?.maxBundleSize) && fs.existsSync(tarballFilePath)) {\n const { size: tarballFileBytes } = fs.statSync(tarballFilePath);\n const maxBundleBytes = xbytes.parseSize(storeJson.maxBundleSize);\n if (tarballFileBytes > maxBundleBytes) {\n throw new Error(\n `The release file ${path.basename(tarballFilePath)} size cannot exceed ${storeJson.maxBundleSize}`,\n );\n }\n }\n};\n","import axios from '@abtnode/util/lib/axios';\nimport { isValid, toTypeInfo, types } from '@arcblock/did';\nimport { checkFreeBlocklet } from '@blocklet/meta/lib/payment/v2';\nimport { isFreeBlocklet } from '@blocklet/meta/lib/util';\nimport { getBlockletMetaFromUrls, getSourceUrlsFromConfig } from '@blocklet/meta/lib/util-meta';\nimport { fromSecretKey } from '@ocap/wallet';\nimport FormData from 'form-data';\nimport fs from 'fs-extra';\nimport yaml from 'js-yaml';\nimport get from 'lodash/get';\nimport pAll from 'p-all';\nimport path from 'path';\nimport { joinURL } from 'ufo';\n\nimport { createRelease } from '@abtnode/util/lib/create-blocklet-release';\nimport { baseWrapSpinner } from './utils/base-wrap-spinner';\nimport { Share, ensureBlockletNftFactory, getShare } from './utils/get-payment-share';\nimport { replaceOrigin } from './utils/replace-origin';\nimport { BlockletMeta, sign } from './utils/sign';\nimport { verifyBundleSize } from './utils/verify-bundle-size';\n\nexport interface UploadOptions {\n storeUrl: string;\n accessToken: string;\n developerDid: string;\n possibleSameStore?: boolean;\n metaFile: string;\n source: string;\n wrapSpinner?: typeof baseWrapSpinner;\n printSuccess: (...args: unknown[]) => void;\n printTar: (meta: unknown, metaPath: string) => Promise<void>;\n debug: (...args: unknown[]) => void;\n}\n\ninterface Source {\n name?: string;\n store?: string;\n version?: string;\n url?: string;\n}\n\nexport async function upload({\n storeUrl,\n accessToken,\n developerDid,\n metaFile,\n source,\n possibleSameStore,\n wrapSpinner = baseWrapSpinner,\n printSuccess = () => {},\n printTar = async () => {},\n debug = () => {},\n}: UploadOptions): Promise<BlockletMeta | undefined> {\n if (!fs.existsSync(metaFile)) {\n throw new Error(`Invalid release meta file ${metaFile} not exists`);\n }\n const meta = fs.readJSONSync(metaFile);\n const releaseReleaseDir = path.resolve(metaFile, '..', '..', 'bundle');\n if (possibleSameStore && meta.components) {\n const parseSource = async (component: { name: string; source?: Source }) => {\n try {\n const nextComponent = { ...component };\n if (nextComponent.source) {\n nextComponent.source = { ...nextComponent.source };\n if (nextComponent.source.url) {\n nextComponent.source.url = replaceOrigin(nextComponent.source.url, storeUrl);\n const res = await axios.get(nextComponent.source.url);\n return res?.data?.did ? nextComponent : component;\n }\n nextComponent.source.store = storeUrl;\n } else {\n nextComponent.source = { name: component.name, store: storeUrl, version: 'latest' };\n }\n const urls = getSourceUrlsFromConfig(nextComponent);\n await getBlockletMetaFromUrls(urls, {\n returnUrl: false,\n validateFn: () => true,\n ensureTarball: false,\n });\n return nextComponent;\n } catch (err) {\n // console.error(`Failed to get meta ${component.name} from ${storeUrl}`, err);\n return component;\n }\n };\n const events = meta.components.map((component: { name: string; source?: Source }) => {\n return () => parseSource(component);\n });\n meta.components = await pAll(events, { concurrency: 4 });\n\n // update yaml\n const yamlFile = path.join(releaseReleaseDir, 'blocklet.yml');\n const metaYaml = yaml.load(fs.readFileSync(yamlFile).toString(), { json: true }) as Record<string, unknown>;\n metaYaml.components = meta.components;\n if (meta.engine && meta.engine?.source?.store) {\n meta.engine = await parseSource({ ...meta.engine });\n metaYaml.engine = meta.engine;\n }\n fs.writeFileSync(yamlFile, yaml.dump(metaYaml, { sortKeys: false, skipInvalid: true }));\n\n // create release\n const dir = path.resolve(metaFile, '..', '..');\n const release = await createRelease(dir, {\n printError: (err: Error) => {\n throw err;\n },\n printInfo: () => {},\n tarball: meta.dist.tarball,\n });\n\n meta.dist.integrity = release.meta.dist.integrity;\n meta.dist.size = release.meta.dist.size;\n }\n // convert meta.charging -> meta.payment\n if (meta.payment === undefined) {\n const { charging } = meta;\n const payment = {} as Record<string, unknown>;\n if (charging && Array.isArray(charging.tokens)) {\n payment.price = charging.tokens.map((x: Share) => ({\n address: x.address,\n value: x.price,\n }));\n }\n if (charging && Array.isArray(charging.shares)) {\n payment.share = charging.shares.map((x: Share) => ({\n name: x.name,\n address: x.address,\n value: x.share,\n }));\n }\n meta.payment = payment;\n delete meta.charging;\n }\n\n const { tarball } = meta.dist;\n const tarballFilePath = path.join(path.dirname(metaFile), tarball);\n await verifyBundleSize({ storeUrl, tarballFilePath });\n\n const wallet = fromSecretKey(accessToken);\n\n if (!wallet) {\n throw new Error(\n `[NO-ACCESS] Blocklet store accessToken is used to authorize developers when uploading blocklets, you can generate your own accessToken from ${storeUrl}`,\n );\n }\n\n if (isFreeBlocklet(meta) === false) {\n // check for developer did\n if (!developerDid || isValid(developerDid) === false) {\n throw new Error(\n `developerDid is required to upload a paid blocklet, please get your developerDid from ${storeUrl}`,\n );\n }\n\n // create nft factory address if the blocklet requires payment\n try {\n const typeInfo = toTypeInfo(meta.did);\n const isNewDid = typeInfo.role === types.RoleType.ROLE_BLOCKLET;\n // new did mode: share payment to blocklet-did\n // old did mode: share payment to developer-did\n meta.payment.share = await getShare({ meta, storeUrl, developerDid: isNewDid ? meta.did : developerDid });\n const nftFactory = await ensureBlockletNftFactory({ meta, storeUrl });\n meta.nftFactory = nftFactory;\n printSuccess(`NFT Factory for ${meta.name}: ${nftFactory}`);\n } catch (err) {\n throw new Error(`Can not determine NFT factory for ${meta.name}: ${err.message}`);\n }\n } else {\n await checkFreeBlocklet(meta);\n }\n\n const signature = await sign(meta, wallet);\n meta.signatures = [signature];\n\n printSuccess('Blocklet release signed successfully, signature:', signature.sig);\n\n await printTar(meta, tarballFilePath);\n\n const data = new FormData();\n data.append('blocklet-meta', Buffer.from(JSON.stringify(meta)), { filename: path.basename(metaFile) });\n data.append('blocklet-tarball', fs.readFileSync(tarballFilePath), { filename: path.basename(tarballFilePath) });\n data.append('source', source);\n\n let uploadResult: { data?: { status: string } } = {};\n try {\n await wrapSpinner(`Uploading ${meta.name}@${meta.version}...`, async () => {\n uploadResult = await axios({\n url: joinURL(storeUrl, '/api/blocklets/upload'),\n method: 'POST',\n data,\n headers: {\n ...data.getHeaders(),\n 'blocklet-version': meta.version,\n 'blocklet-did': meta.did,\n },\n timeout: 30 * 60 * 1000, // 30 minutes\n maxContentLength: Number.POSITIVE_INFINITY,\n maxBodyLength: Number.POSITIVE_INFINITY,\n });\n });\n debug('Upload result:', uploadResult.data);\n } catch (err) {\n if (err.response) {\n const errorMessage = get(err.response, 'data.error', err.response.statusText);\n throw new Error(`Upload failed with error: [${err.response.status}] \\n${errorMessage}\\n`);\n }\n\n throw new Error(`Upload failed with error: ${err.message}`);\n }\n\n return { ...meta, status: uploadResult.data?.status || '' };\n}\n"],"names":["fs"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blocklet/store",
|
|
3
|
-
"version": "1.17.8-beta-
|
|
3
|
+
"version": "1.17.8-beta-20260121-102603-f9d0176f",
|
|
4
4
|
"description": "Connect Store and upload blocklet to Store",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -27,11 +27,11 @@
|
|
|
27
27
|
"author": "",
|
|
28
28
|
"license": "ISC",
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@abtnode/constant": "1.17.8-beta-
|
|
31
|
-
"@abtnode/util": "1.17.8-beta-
|
|
30
|
+
"@abtnode/constant": "1.17.8-beta-20260121-102603-f9d0176f",
|
|
31
|
+
"@abtnode/util": "1.17.8-beta-20260121-102603-f9d0176f",
|
|
32
32
|
"@arcblock/did": "^1.28.5",
|
|
33
|
-
"@blocklet/constant": "1.17.8-beta-
|
|
34
|
-
"@blocklet/meta": "1.17.8-beta-
|
|
33
|
+
"@blocklet/constant": "1.17.8-beta-20260121-102603-f9d0176f",
|
|
34
|
+
"@blocklet/meta": "1.17.8-beta-20260121-102603-f9d0176f",
|
|
35
35
|
"@ocap/client": "^1.28.5",
|
|
36
36
|
"@ocap/util": "^1.28.5",
|
|
37
37
|
"@ocap/wallet": "^1.28.5",
|
|
@@ -59,5 +59,5 @@
|
|
|
59
59
|
"prettier": "^3.3.2",
|
|
60
60
|
"unbuild": "^2.0.0"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "7ae816f51ed511037e5b7ac0008012ebf4afc987"
|
|
63
63
|
}
|