@1sat/permission-module 0.0.50 → 0.0.51
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/apply.d.ts +1 -1
- package/dist/apply.d.ts.map +1 -1
- package/dist/apply.js +3 -3
- package/dist/apply.js.map +1 -1
- package/dist/apply.test.js +29 -29
- package/dist/apply.test.js.map +1 -1
- package/dist/basketAccess.d.ts +38 -0
- package/dist/basketAccess.d.ts.map +1 -0
- package/dist/basketAccess.js +237 -0
- package/dist/basketAccess.js.map +1 -0
- package/dist/buildPromptIntent.d.ts +15 -0
- package/dist/buildPromptIntent.d.ts.map +1 -0
- package/dist/buildPromptIntent.js +575 -0
- package/dist/buildPromptIntent.js.map +1 -0
- package/dist/createOneSatPermissionModule.d.ts +10 -5
- package/dist/createOneSatPermissionModule.d.ts.map +1 -1
- package/dist/createOneSatPermissionModule.js +28 -6
- package/dist/createOneSatPermissionModule.js.map +1 -1
- package/dist/enrichIntent.d.ts +121 -5
- package/dist/enrichIntent.d.ts.map +1 -1
- package/dist/enrichIntent.js +576 -137
- package/dist/enrichIntent.js.map +1 -1
- package/dist/handlers.d.ts +12 -32
- package/dist/handlers.d.ts.map +1 -1
- package/dist/handlers.js +120 -155
- package/dist/handlers.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/listOutputsScope.test.d.ts +2 -0
- package/dist/listOutputsScope.test.d.ts.map +1 -0
- package/dist/listOutputsScope.test.js +116 -0
- package/dist/listOutputsScope.test.js.map +1 -0
- package/dist/promptModel.d.ts +115 -0
- package/dist/promptModel.d.ts.map +1 -0
- package/dist/promptModel.js +7 -0
- package/dist/promptModel.js.map +1 -0
- package/dist/types.d.ts +36 -10
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/verifyIntent.d.ts +4 -4
- package/dist/verifyIntent.d.ts.map +1 -1
- package/dist/verifyIntent.js +120 -40
- package/dist/verifyIntent.js.map +1 -1
- package/dist/viewScope.d.ts +51 -0
- package/dist/viewScope.d.ts.map +1 -0
- package/dist/viewScope.js +113 -0
- package/dist/viewScope.js.map +1 -0
- package/dist/viewScope.test.d.ts +2 -0
- package/dist/viewScope.test.d.ts.map +1 -0
- package/dist/viewScope.test.js +60 -0
- package/dist/viewScope.test.js.map +1 -0
- package/package.json +42 -42
package/dist/apply.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { CreateActionArgs, WalletInterface } from '@bsv/sdk';
|
|
2
|
-
export declare function applyCreateAction(baseWallet: WalletInterface, args: CreateActionArgs,
|
|
2
|
+
export declare function applyCreateAction(baseWallet: WalletInterface, args: CreateActionArgs, _intent?: string): Promise<void>;
|
|
3
3
|
//# sourceMappingURL=apply.d.ts.map
|
package/dist/apply.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../src/apply.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAEjE,wBAAsB,iBAAiB,CACtC,UAAU,EAAE,eAAe,EAC3B,IAAI,EAAE,gBAAgB,EACtB,
|
|
1
|
+
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../src/apply.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAEjE,wBAAsB,iBAAiB,CACtC,UAAU,EAAE,eAAe,EAC3B,IAAI,EAAE,gBAAgB,EACtB,OAAO,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAEf"}
|
package/dist/apply.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Module-side apply entry. Crypto always uses the module's base wallet
|
|
3
3
|
* (never the gated WPM wrapper). Implementations live in @1sat/actions.
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
6
|
-
export async function applyCreateAction(baseWallet, args,
|
|
7
|
-
await
|
|
5
|
+
import { applyP1SatCreateAction } from '@1sat/actions';
|
|
6
|
+
export async function applyCreateAction(baseWallet, args, _intent) {
|
|
7
|
+
await applyP1SatCreateAction(baseWallet, args);
|
|
8
8
|
}
|
|
9
9
|
//# sourceMappingURL=apply.js.map
|
package/dist/apply.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../src/apply.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../src/apply.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAGtD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACtC,UAA2B,EAC3B,IAAsB,EACtB,OAAgB;IAEhB,MAAM,sBAAsB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AAC/C,CAAC"}
|
package/dist/apply.test.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, expect, test } from 'bun:test';
|
|
2
|
-
import { OPNS_BASKET, OPNS_REGISTER_COUNTERPARTY, OPNS_REGISTER_SIG_PLACEHOLDER_LEN,
|
|
2
|
+
import { OPNS_BASKET, OPNS_REGISTER_COUNTERPARTY, OPNS_REGISTER_SIG_PLACEHOLDER_LEN, buildActionDispatchLabel, buildInputAssetLabel, P1SAT_PROTOCOL, opnsRegisterKeyId, } from '@1sat/types';
|
|
3
3
|
import { LockingScript, PrivateKey, PushDrop, Utils } from '@bsv/sdk';
|
|
4
4
|
import { applyCreateAction } from './apply';
|
|
5
5
|
import { CommitmentCache } from './commitmentCache';
|
|
@@ -15,7 +15,6 @@ function mockBaseWallet() {
|
|
|
15
15
|
return { publicKey: protocolKey };
|
|
16
16
|
},
|
|
17
17
|
async createSignature(_args) {
|
|
18
|
-
// 70-byte DER-ish stub — PushDrop only embeds the bytes
|
|
19
18
|
const sig = new Array(70).fill(0x30);
|
|
20
19
|
return { signature: sig };
|
|
21
20
|
},
|
|
@@ -35,8 +34,8 @@ async function registerArgs(wallet, outpoint = `${'aa'.repeat(32)}.0`) {
|
|
|
35
34
|
return {
|
|
36
35
|
description: 'Publish OpNS',
|
|
37
36
|
labels: [
|
|
38
|
-
|
|
39
|
-
'
|
|
37
|
+
buildActionDispatchLabel('opns'),
|
|
38
|
+
buildInputAssetLabel(OPNS_BASKET, 'test-id'),
|
|
40
39
|
],
|
|
41
40
|
inputs: [
|
|
42
41
|
{
|
|
@@ -56,36 +55,28 @@ async function registerArgs(wallet, outpoint = `${'aa'.repeat(32)}.0`) {
|
|
|
56
55
|
],
|
|
57
56
|
};
|
|
58
57
|
}
|
|
59
|
-
describe('applyCreateAction /
|
|
60
|
-
test('
|
|
58
|
+
describe('applyCreateAction / script seal', () => {
|
|
59
|
+
test('seals zeroed PushDrop signature in place', async () => {
|
|
61
60
|
const wallet = mockBaseWallet();
|
|
62
61
|
const args = await registerArgs(wallet);
|
|
63
62
|
const outputsRef = args.outputs;
|
|
64
63
|
const out = outputsRef[0];
|
|
65
64
|
const before = out.lockingScript;
|
|
66
|
-
await applyCreateAction(wallet, args
|
|
65
|
+
await applyCreateAction(wallet, args);
|
|
67
66
|
expect(args.outputs).toBe(outputsRef);
|
|
68
67
|
expect(out.lockingScript).not.toBe(before);
|
|
69
68
|
const fields = PushDrop.decode(LockingScript.fromHex(out.lockingScript)).fields;
|
|
70
69
|
const signature = fields[fields.length - 1];
|
|
71
70
|
expect(signature.some((b) => b !== 0)).toBe(true);
|
|
72
|
-
// Placeholder was sized to the longest DER signature, so the sealed
|
|
73
|
-
// script is never larger than what was estimated.
|
|
74
71
|
expect(out.lockingScript.length).toBeLessThanOrEqual(before.length);
|
|
75
72
|
});
|
|
76
|
-
test('
|
|
73
|
+
test('no-op when script is already sealed', async () => {
|
|
77
74
|
const wallet = mockBaseWallet();
|
|
78
75
|
const args = await registerArgs(wallet);
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
const wallet = mockBaseWallet();
|
|
84
|
-
const args = await registerArgs(wallet);
|
|
85
|
-
args.labels = [buildIntentLabel(P1SAT_INTENTS.OPNS_DEREGISTER)];
|
|
86
|
-
const before = args.outputs[0].lockingScript;
|
|
87
|
-
await applyCreateAction(wallet, args, P1SAT_INTENTS.OPNS_DEREGISTER);
|
|
88
|
-
expect(args.outputs[0].lockingScript).toBe(before);
|
|
76
|
+
await applyCreateAction(wallet, args);
|
|
77
|
+
const sealed = args.outputs[0].lockingScript;
|
|
78
|
+
await applyCreateAction(wallet, args);
|
|
79
|
+
expect(args.outputs[0].lockingScript).toBe(sealed);
|
|
89
80
|
});
|
|
90
81
|
});
|
|
91
82
|
describe('handleCreateActionRequest admin vs dApp', () => {
|
|
@@ -102,6 +93,8 @@ describe('handleCreateActionRequest admin vs dApp', () => {
|
|
|
102
93
|
wallet,
|
|
103
94
|
promptHandler,
|
|
104
95
|
cache: new CommitmentCache(60),
|
|
96
|
+
schemeId: 'opns',
|
|
97
|
+
ownedBaskets: new Set([OPNS_BASKET]),
|
|
105
98
|
adminOriginator: 'admin.yours.org',
|
|
106
99
|
};
|
|
107
100
|
const next = await handleCreateActionRequest(deps, args, 'admin.yours.org');
|
|
@@ -110,7 +103,6 @@ describe('handleCreateActionRequest admin vs dApp', () => {
|
|
|
110
103
|
});
|
|
111
104
|
test('dApp prompts then applies on approve', async () => {
|
|
112
105
|
const wallet = mockBaseWallet();
|
|
113
|
-
// enrichIntent listOutputs will fail → empty inputs; still applies
|
|
114
106
|
const listWallet = {
|
|
115
107
|
...wallet,
|
|
116
108
|
async listOutputs() {
|
|
@@ -119,25 +111,31 @@ describe('handleCreateActionRequest admin vs dApp', () => {
|
|
|
119
111
|
};
|
|
120
112
|
const args = await registerArgs(wallet);
|
|
121
113
|
const before = args.outputs[0].lockingScript;
|
|
122
|
-
let
|
|
114
|
+
let promptKind = '';
|
|
115
|
+
let legCount = 0;
|
|
116
|
+
let sealLeg = false;
|
|
123
117
|
const promptHandler = async (req) => {
|
|
124
|
-
// A host may hand this request to a renderer in another process — the
|
|
125
|
-
// browser extension writes it through chrome.storage. Anything that
|
|
126
|
-
// cannot be structured-cloned (a promise, a function) arrives as `{}`
|
|
127
|
-
// and breaks the prompt, so the payload must survive a round trip.
|
|
128
118
|
expect(() => structuredClone(req)).not.toThrow();
|
|
129
|
-
|
|
130
|
-
|
|
119
|
+
// Transaction IR: panels built in-module (no raw legs on the wire).
|
|
120
|
+
const panels = req.payload.panels;
|
|
121
|
+
promptKind = String(req.payload.title ?? '');
|
|
122
|
+
legCount = panels?.length ?? 0;
|
|
123
|
+
sealLeg = Boolean(panels?.some((p) => p.meta?.some((m) => m.key === 'Sign' &&
|
|
124
|
+
(m.value?.includes('PushDrop') || m.value?.includes('Sigma')))));
|
|
131
125
|
return true;
|
|
132
126
|
};
|
|
133
127
|
const deps = {
|
|
134
128
|
wallet: listWallet,
|
|
135
129
|
promptHandler,
|
|
136
130
|
cache: new CommitmentCache(60),
|
|
131
|
+
schemeId: 'opns',
|
|
132
|
+
ownedBaskets: new Set([OPNS_BASKET]),
|
|
137
133
|
adminOriginator: 'admin.yours.org',
|
|
138
134
|
};
|
|
139
135
|
const next = await handleCreateActionRequest(deps, args, 'https://dapp.example');
|
|
140
|
-
expect(
|
|
136
|
+
expect(promptKind).toBe('Transaction Request');
|
|
137
|
+
expect(legCount).toBeGreaterThan(0);
|
|
138
|
+
expect(sealLeg).toBe(true);
|
|
141
139
|
expect(next.outputs[0].lockingScript).not.toBe(before);
|
|
142
140
|
});
|
|
143
141
|
test('dApp reject does not apply', async () => {
|
|
@@ -154,6 +152,8 @@ describe('handleCreateActionRequest admin vs dApp', () => {
|
|
|
154
152
|
wallet: listWallet,
|
|
155
153
|
promptHandler: async () => false,
|
|
156
154
|
cache: new CommitmentCache(60),
|
|
155
|
+
schemeId: 'opns',
|
|
156
|
+
ownedBaskets: new Set([OPNS_BASKET]),
|
|
157
157
|
adminOriginator: 'admin.yours.org',
|
|
158
158
|
};
|
|
159
159
|
await expect(handleCreateActionRequest(deps, args, 'https://dapp.example')).rejects.toThrow(/rejected/);
|
package/dist/apply.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.test.js","sourceRoot":"","sources":["../src/apply.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AACjD,OAAO,EACN,WAAW,EACX,0BAA0B,EAC1B,iCAAiC,EACjC,
|
|
1
|
+
{"version":3,"file":"apply.test.js","sourceRoot":"","sources":["../src/apply.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { PermissionSchemeId } from '@1sat/types';
|
|
2
|
+
import type { IPermissionStore } from '@1sat/wallet';
|
|
3
|
+
import type { InternalizeActionArgs, ListOutputsArgs } from '@bsv/sdk';
|
|
4
|
+
import type { PromptHandler, VerificationServices } from './types';
|
|
5
|
+
/** Deps needed for basket / view-scope gating (no createAction pipeline). */
|
|
6
|
+
export interface BasketAccessDeps {
|
|
7
|
+
schemeId: PermissionSchemeId;
|
|
8
|
+
ownedBaskets: ReadonlySet<string>;
|
|
9
|
+
promptHandler: PromptHandler;
|
|
10
|
+
adminOriginator?: string;
|
|
11
|
+
permissionStore?: IPermissionStore;
|
|
12
|
+
services?: VerificationServices;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Gate access to storage baskets (internalize / plain owned basket).
|
|
16
|
+
* Admin bypasses. Grants keyed by storage basket name.
|
|
17
|
+
*/
|
|
18
|
+
export declare function ensureBasketAccess(deps: BasketAccessDeps, originator: string, baskets: Iterable<string>): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Gate view under `p <scheme> <scope>`.
|
|
21
|
+
*
|
|
22
|
+
* Grant keys:
|
|
23
|
+
* - `p <scheme> all` covers every scope/value
|
|
24
|
+
* - bare `p <scheme> collection` (etc.) = legacy whole-axis
|
|
25
|
+
* - `p <scheme> collection <value>` = one allowed axis tag value
|
|
26
|
+
*/
|
|
27
|
+
export declare function ensureViewScopeAccess(deps: BasketAccessDeps, originator: string, grantBasket: string, axisValues?: string[]): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* listOutputs onRequest:
|
|
30
|
+
* - `p <scheme> <scope>` → parse scope, view grant, normalize to storage, inject scope tag
|
|
31
|
+
* - plain owned storage basket → ordinary basket access
|
|
32
|
+
*/
|
|
33
|
+
export declare function handleListOutputsRequest(deps: BasketAccessDeps, args: ListOutputsArgs, originator: string): Promise<ListOutputsArgs>;
|
|
34
|
+
/**
|
|
35
|
+
* internalizeAction onRequest: gate basket access for insertion baskets.
|
|
36
|
+
*/
|
|
37
|
+
export declare function handleInternalizeActionRequest(deps: BasketAccessDeps, args: InternalizeActionArgs, originator: string): Promise<InternalizeActionArgs>;
|
|
38
|
+
//# sourceMappingURL=basketAccess.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basketAccess.d.ts","sourceRoot":"","sources":["../src/basketAccess.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,KAAK,EACX,qBAAqB,EACrB,eAAe,EACf,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAEX,aAAa,EACb,oBAAoB,EACpB,MAAM,SAAS,CAAA;AAOhB,6EAA6E;AAC7E,MAAM,WAAW,gBAAgB;IAChC,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACjC,aAAa,EAAE,aAAa,CAAA;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,eAAe,CAAC,EAAE,gBAAgB,CAAA;IAClC,QAAQ,CAAC,EAAE,oBAAoB,CAAA;CAC/B;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACvC,IAAI,EAAE,gBAAgB,EACtB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,GACvB,OAAO,CAAC,IAAI,CAAC,CAYf;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CAC1C,IAAI,EAAE,gBAAgB,EACtB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,UAAU,GAAE,MAAM,EAAO,GACvB,OAAO,CAAC,IAAI,CAAC,CAwCf;AAgID;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC7C,IAAI,EAAE,gBAAgB,EACtB,IAAI,EAAE,eAAe,EACrB,UAAU,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,CAuD1B;AAED;;GAEG;AACH,wBAAsB,8BAA8B,CACnD,IAAI,EAAE,gBAAgB,EACtB,IAAI,EAAE,qBAAqB,EAC3B,UAAU,EAAE,MAAM,GAChB,OAAO,CAAC,qBAAqB,CAAC,CAYhC"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { nameFromMap } from '@1sat/types';
|
|
2
|
+
import { axisTagValues, parseViewBasket, viewGrantKey, } from './viewScope';
|
|
3
|
+
/**
|
|
4
|
+
* Gate access to storage baskets (internalize / plain owned basket).
|
|
5
|
+
* Admin bypasses. Grants keyed by storage basket name.
|
|
6
|
+
*/
|
|
7
|
+
export async function ensureBasketAccess(deps, originator, baskets) {
|
|
8
|
+
if (deps.adminOriginator && originator === deps.adminOriginator)
|
|
9
|
+
return;
|
|
10
|
+
const unique = new Set();
|
|
11
|
+
for (const b of baskets) {
|
|
12
|
+
if (typeof b !== 'string')
|
|
13
|
+
continue;
|
|
14
|
+
const n = b.trim().toLowerCase();
|
|
15
|
+
if (deps.ownedBaskets.has(n))
|
|
16
|
+
unique.add(n);
|
|
17
|
+
}
|
|
18
|
+
if (unique.size === 0)
|
|
19
|
+
return;
|
|
20
|
+
await ensureGrants(deps, originator, [...unique], 'basket');
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Gate view under `p <scheme> <scope>`.
|
|
24
|
+
*
|
|
25
|
+
* Grant keys:
|
|
26
|
+
* - `p <scheme> all` covers every scope/value
|
|
27
|
+
* - bare `p <scheme> collection` (etc.) = legacy whole-axis
|
|
28
|
+
* - `p <scheme> collection <value>` = one allowed axis tag value
|
|
29
|
+
*/
|
|
30
|
+
export async function ensureViewScopeAccess(deps, originator, grantBasket, axisValues = []) {
|
|
31
|
+
if (deps.adminOriginator && originator === deps.adminOriginator)
|
|
32
|
+
return;
|
|
33
|
+
const allGrant = `p ${deps.schemeId} all`;
|
|
34
|
+
const keysToEnsure = axisValues.length === 0
|
|
35
|
+
? [grantBasket]
|
|
36
|
+
: axisValues.map((v) => viewGrantKey(grantBasket, v));
|
|
37
|
+
if (deps.permissionStore) {
|
|
38
|
+
const all = await deps.permissionStore.findGrant({
|
|
39
|
+
type: 'basket',
|
|
40
|
+
originator,
|
|
41
|
+
basket: allGrant,
|
|
42
|
+
});
|
|
43
|
+
if (all && !isGrantExpired(all.expiry))
|
|
44
|
+
return;
|
|
45
|
+
// Legacy whole-axis grant covers any value on that axis
|
|
46
|
+
const whole = await deps.permissionStore.findGrant({
|
|
47
|
+
type: 'basket',
|
|
48
|
+
originator,
|
|
49
|
+
basket: grantBasket,
|
|
50
|
+
});
|
|
51
|
+
if (whole && !isGrantExpired(whole.expiry))
|
|
52
|
+
return;
|
|
53
|
+
const missing = [];
|
|
54
|
+
for (const key of keysToEnsure) {
|
|
55
|
+
const g = await deps.permissionStore.findGrant({
|
|
56
|
+
type: 'basket',
|
|
57
|
+
originator,
|
|
58
|
+
basket: key,
|
|
59
|
+
});
|
|
60
|
+
if (!g || isGrantExpired(g.expiry))
|
|
61
|
+
missing.push(key);
|
|
62
|
+
}
|
|
63
|
+
if (missing.length === 0)
|
|
64
|
+
return;
|
|
65
|
+
await ensureGrants(deps, originator, missing, 'view');
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
await ensureGrants(deps, originator, keysToEnsure, 'view');
|
|
69
|
+
}
|
|
70
|
+
async function ensureGrants(deps, originator, grantKeys, kind) {
|
|
71
|
+
const toPrompt = [];
|
|
72
|
+
if (deps.permissionStore) {
|
|
73
|
+
for (const basket of grantKeys) {
|
|
74
|
+
const grant = await deps.permissionStore.findGrant({
|
|
75
|
+
type: 'basket',
|
|
76
|
+
originator,
|
|
77
|
+
basket,
|
|
78
|
+
});
|
|
79
|
+
if (!grant || isGrantExpired(grant.expiry)) {
|
|
80
|
+
toPrompt.push(basket);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
toPrompt.push(...grantKeys);
|
|
86
|
+
}
|
|
87
|
+
if (toPrompt.length === 0)
|
|
88
|
+
return;
|
|
89
|
+
const label = kind === 'view' ? 'view' : 'access';
|
|
90
|
+
const baskets = await enrichBasketAccessRequests(deps, toPrompt);
|
|
91
|
+
const approved = await deps.promptHandler({
|
|
92
|
+
kind: 'basketAccess',
|
|
93
|
+
originator,
|
|
94
|
+
payload: { baskets },
|
|
95
|
+
summary: toPrompt.length === 1
|
|
96
|
+
? `Grant ${label} to ${toPrompt[0]}`
|
|
97
|
+
: `Grant ${label} to ${toPrompt.length} baskets`,
|
|
98
|
+
});
|
|
99
|
+
if (!approved) {
|
|
100
|
+
throw new Error(`Permission module (${deps.schemeId}): user denied ${label} (${toPrompt.join(', ')}).`);
|
|
101
|
+
}
|
|
102
|
+
if (deps.permissionStore) {
|
|
103
|
+
const now = Date.now();
|
|
104
|
+
for (const basket of toPrompt) {
|
|
105
|
+
await deps.permissionStore.putGrant({
|
|
106
|
+
key: { type: 'basket', originator, basket },
|
|
107
|
+
expiry: 0,
|
|
108
|
+
grantedAt: now,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function isGrantExpired(expiry) {
|
|
114
|
+
if (!expiry)
|
|
115
|
+
return false;
|
|
116
|
+
return expiry < Math.floor(Date.now() / 1000);
|
|
117
|
+
}
|
|
118
|
+
/** Parse `p 1sat collection <value>` style grant keys. */
|
|
119
|
+
function parseViewGrantKey(key) {
|
|
120
|
+
const m = /^p\s+[a-z0-9]+\s+(all|collection|app|creator|id)(?:\s+(.+))?$/i.exec(key.trim());
|
|
121
|
+
if (!m)
|
|
122
|
+
return {};
|
|
123
|
+
return {
|
|
124
|
+
scope: m[1].toLowerCase(),
|
|
125
|
+
...(m[2]?.trim() && { value: m[2].trim() }),
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Attach scope/value and optional OrdFS display (name + image) for collection
|
|
130
|
+
* (and similar) view grants. Never throws — enrichment is best-effort.
|
|
131
|
+
*/
|
|
132
|
+
async function enrichBasketAccessRequests(deps, grantKeys) {
|
|
133
|
+
const base = grantKeys.map((basket) => {
|
|
134
|
+
const { scope, value } = parseViewGrantKey(basket);
|
|
135
|
+
return {
|
|
136
|
+
basket,
|
|
137
|
+
scope,
|
|
138
|
+
value,
|
|
139
|
+
description: scope === 'collection' && value
|
|
140
|
+
? 'View items in this collection'
|
|
141
|
+
: scope === 'all'
|
|
142
|
+
? 'View entire 1sat inventory'
|
|
143
|
+
: scope
|
|
144
|
+
? `View ${scope}-scoped items`
|
|
145
|
+
: undefined,
|
|
146
|
+
};
|
|
147
|
+
});
|
|
148
|
+
const collectionIds = base
|
|
149
|
+
.filter((b) => b.scope === 'collection' && b.value)
|
|
150
|
+
.map((b) => b.value);
|
|
151
|
+
if (collectionIds.length === 0)
|
|
152
|
+
return base;
|
|
153
|
+
const bulk = deps.services?.ordfs?.bulkMetadata;
|
|
154
|
+
const getContentUrl = deps.services?.ordfs?.getContentUrl;
|
|
155
|
+
if (typeof bulk !== 'function')
|
|
156
|
+
return base;
|
|
157
|
+
try {
|
|
158
|
+
const meta = await bulk.call(deps.services?.ordfs, collectionIds);
|
|
159
|
+
for (const b of base) {
|
|
160
|
+
if (b.scope !== 'collection' || !b.value)
|
|
161
|
+
continue;
|
|
162
|
+
const m = meta[b.value] ?? meta[b.value.replace('_', '.')];
|
|
163
|
+
if (!m)
|
|
164
|
+
continue;
|
|
165
|
+
const name = nameFromMap(m.map);
|
|
166
|
+
if (name)
|
|
167
|
+
b.name = name;
|
|
168
|
+
const ct = m.contentType?.split(';')[0]?.trim().toLowerCase() ?? '';
|
|
169
|
+
if (ct.startsWith('image/') && typeof getContentUrl === 'function') {
|
|
170
|
+
b.imageUrl = getContentUrl.call(deps.services?.ordfs, b.value);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
/* keep id-only rows */
|
|
176
|
+
}
|
|
177
|
+
return base;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* listOutputs onRequest:
|
|
181
|
+
* - `p <scheme> <scope>` → parse scope, view grant, normalize to storage, inject scope tag
|
|
182
|
+
* - plain owned storage basket → ordinary basket access
|
|
183
|
+
*/
|
|
184
|
+
export async function handleListOutputsRequest(deps, args, originator) {
|
|
185
|
+
const raw = args.basket;
|
|
186
|
+
if (!raw || typeof raw !== 'string')
|
|
187
|
+
return args;
|
|
188
|
+
const trimmed = raw.trim().toLowerCase();
|
|
189
|
+
const pPrefix = `p ${deps.schemeId}`;
|
|
190
|
+
if (deps.ownedBaskets.has(trimmed)) {
|
|
191
|
+
await ensureBasketAccess(deps, originator, [trimmed]);
|
|
192
|
+
return args;
|
|
193
|
+
}
|
|
194
|
+
if (trimmed !== pPrefix && !trimmed.startsWith(`${pPrefix} `)) {
|
|
195
|
+
return args;
|
|
196
|
+
}
|
|
197
|
+
const parsed = parseViewBasket(deps.schemeId, raw);
|
|
198
|
+
if (!parsed.ok) {
|
|
199
|
+
throw new Error(`Permission module (${deps.schemeId}): ${parsed.error}`);
|
|
200
|
+
}
|
|
201
|
+
// Non-all scopes: values live in tags (may contain _ . : illegal in baskets)
|
|
202
|
+
let axisValues = [];
|
|
203
|
+
if (parsed.axisPrefix) {
|
|
204
|
+
axisValues = axisTagValues(args.tags, parsed.axisPrefix);
|
|
205
|
+
if (axisValues.length === 0) {
|
|
206
|
+
throw new Error(`Permission module (${deps.schemeId}): basket "${parsed.grantBasket}" requires at least one ${parsed.axisPrefix}* tag`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
// id lookup: targeted query — do not require standing all/collection grants
|
|
210
|
+
if (!parsed.autoAllowView) {
|
|
211
|
+
await ensureViewScopeAccess(deps, originator, parsed.grantBasket, axisValues);
|
|
212
|
+
}
|
|
213
|
+
const next = {
|
|
214
|
+
...args,
|
|
215
|
+
basket: parsed.storageBasket,
|
|
216
|
+
};
|
|
217
|
+
// Axis tags already on the request are mandatory: force all so any cannot drop them
|
|
218
|
+
if (parsed.axisPrefix && (args.tags?.length ?? 0) > 0) {
|
|
219
|
+
next.tagQueryMode = 'all';
|
|
220
|
+
}
|
|
221
|
+
return next;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* internalizeAction onRequest: gate basket access for insertion baskets.
|
|
225
|
+
*/
|
|
226
|
+
export async function handleInternalizeActionRequest(deps, args, originator) {
|
|
227
|
+
const baskets = [];
|
|
228
|
+
for (const out of args.outputs ?? []) {
|
|
229
|
+
if (out.protocol === 'basket insertion' &&
|
|
230
|
+
out.insertionRemittance?.basket) {
|
|
231
|
+
baskets.push(out.insertionRemittance.basket);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
await ensureBasketAccess(deps, originator, baskets);
|
|
235
|
+
return args;
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=basketAccess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basketAccess.js","sourceRoot":"","sources":["../src/basketAccess.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { EnrichedIntent } from './enrichIntent';
|
|
2
|
+
import type { TransactionPrompt } from './promptModel';
|
|
3
|
+
/** Overlay-resolved token facts (dec/sym/icon) keyed by token id. */
|
|
4
|
+
export type TokenMetaMap = Record<string, {
|
|
5
|
+
dec?: number;
|
|
6
|
+
sym?: string;
|
|
7
|
+
icon?: string;
|
|
8
|
+
iconUrl?: string;
|
|
9
|
+
}>;
|
|
10
|
+
/**
|
|
11
|
+
* Turn enrich output into the serializable prompt IR the UI renders.
|
|
12
|
+
* All classification and presentation facts are settled here.
|
|
13
|
+
*/
|
|
14
|
+
export declare function buildTransactionPrompt(enriched: EnrichedIntent, contentUrls: Record<string, string>, originator: string, tokenMeta?: TokenMetaMap): TransactionPrompt;
|
|
15
|
+
//# sourceMappingURL=buildPromptIntent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildPromptIntent.d.ts","sourceRoot":"","sources":["../src/buildPromptIntent.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACX,cAAc,EAId,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAIX,iBAAiB,EACjB,MAAM,eAAe,CAAA;AAEtB,qEAAqE;AACrE,MAAM,MAAM,YAAY,GAAG,MAAM,CAChC,MAAM,EACN;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAC/D,CAAA;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACrC,QAAQ,EAAE,cAAc,EACxB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,UAAU,EAAE,MAAM,EAClB,SAAS,GAAE,YAAiB,GAC1B,iBAAiB,CA6GnB"}
|