@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.
Files changed (54) hide show
  1. package/dist/apply.d.ts +1 -1
  2. package/dist/apply.d.ts.map +1 -1
  3. package/dist/apply.js +3 -3
  4. package/dist/apply.js.map +1 -1
  5. package/dist/apply.test.js +29 -29
  6. package/dist/apply.test.js.map +1 -1
  7. package/dist/basketAccess.d.ts +38 -0
  8. package/dist/basketAccess.d.ts.map +1 -0
  9. package/dist/basketAccess.js +237 -0
  10. package/dist/basketAccess.js.map +1 -0
  11. package/dist/buildPromptIntent.d.ts +15 -0
  12. package/dist/buildPromptIntent.d.ts.map +1 -0
  13. package/dist/buildPromptIntent.js +575 -0
  14. package/dist/buildPromptIntent.js.map +1 -0
  15. package/dist/createOneSatPermissionModule.d.ts +10 -5
  16. package/dist/createOneSatPermissionModule.d.ts.map +1 -1
  17. package/dist/createOneSatPermissionModule.js +28 -6
  18. package/dist/createOneSatPermissionModule.js.map +1 -1
  19. package/dist/enrichIntent.d.ts +121 -5
  20. package/dist/enrichIntent.d.ts.map +1 -1
  21. package/dist/enrichIntent.js +576 -137
  22. package/dist/enrichIntent.js.map +1 -1
  23. package/dist/handlers.d.ts +12 -32
  24. package/dist/handlers.d.ts.map +1 -1
  25. package/dist/handlers.js +120 -155
  26. package/dist/handlers.js.map +1 -1
  27. package/dist/index.d.ts +5 -2
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +4 -1
  30. package/dist/index.js.map +1 -1
  31. package/dist/listOutputsScope.test.d.ts +2 -0
  32. package/dist/listOutputsScope.test.d.ts.map +1 -0
  33. package/dist/listOutputsScope.test.js +116 -0
  34. package/dist/listOutputsScope.test.js.map +1 -0
  35. package/dist/promptModel.d.ts +115 -0
  36. package/dist/promptModel.d.ts.map +1 -0
  37. package/dist/promptModel.js +7 -0
  38. package/dist/promptModel.js.map +1 -0
  39. package/dist/types.d.ts +36 -10
  40. package/dist/types.d.ts.map +1 -1
  41. package/dist/types.js.map +1 -1
  42. package/dist/verifyIntent.d.ts +4 -4
  43. package/dist/verifyIntent.d.ts.map +1 -1
  44. package/dist/verifyIntent.js +120 -40
  45. package/dist/verifyIntent.js.map +1 -1
  46. package/dist/viewScope.d.ts +51 -0
  47. package/dist/viewScope.d.ts.map +1 -0
  48. package/dist/viewScope.js +113 -0
  49. package/dist/viewScope.js.map +1 -0
  50. package/dist/viewScope.test.d.ts +2 -0
  51. package/dist/viewScope.test.d.ts.map +1 -0
  52. package/dist/viewScope.test.js +60 -0
  53. package/dist/viewScope.test.js.map +1 -0
  54. 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, intent?: string): Promise<void>;
2
+ export declare function applyCreateAction(baseWallet: WalletInterface, args: CreateActionArgs, _intent?: string): Promise<void>;
3
3
  //# sourceMappingURL=apply.d.ts.map
@@ -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,MAAM,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAEf"}
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 { applyP1SatIntent } from '@1sat/actions';
6
- export async function applyCreateAction(baseWallet, args, intent) {
7
- await applyP1SatIntent(baseWallet, args, intent);
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,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAGhD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACtC,UAA2B,EAC3B,IAAsB,EACtB,MAAe;IAEf,MAAM,gBAAgB,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;AACjD,CAAC"}
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"}
@@ -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, P1SAT_INTENTS, P1SAT_PROTOCOL, buildIntentLabel, opnsRegisterKeyId, } from '@1sat/types';
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
- buildIntentLabel(P1SAT_INTENTS.OPNS_REGISTER),
39
- 'p 1sat input opns test-id',
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 / opns.register', () => {
60
- test('replaces the zeroed signature in place (same outputs array ref)', async () => {
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, P1SAT_INTENTS.OPNS_REGISTER);
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('unknown intent fails closed', async () => {
73
+ test('no-op when script is already sealed', async () => {
77
74
  const wallet = mockBaseWallet();
78
75
  const args = await registerArgs(wallet);
79
- args.labels = [buildIntentLabel('nope.unknown')];
80
- await expect(applyCreateAction(wallet, args)).rejects.toThrow(/unknown intent/);
81
- });
82
- test('validate-only intents leave lockingScript unchanged', async () => {
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 promptSummary = '';
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
- promptSummary = req.summary;
130
- expect(req.intent.p1satIntent).toBe('opns.register');
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(promptSummary.toLowerCase()).toContain('publish');
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/);
@@ -1 +1 @@
1
- {"version":3,"file":"apply.test.js","sourceRoot":"","sources":["../src/apply.test.ts"],"names":[],"mappings":"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"}
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"}