Skip to content

Commit 0e8a06b

Browse files
committed
updated & tested 1pass
1 parent 0771909 commit 0e8a06b

File tree

9 files changed

+50
-36
lines changed

9 files changed

+50
-36
lines changed

apps/docs/content/docs/en/tools/onepassword.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ Resolve a secret reference (op://vault/item/field) to its value. Service Account
254254

255255
| Parameter | Type | Description |
256256
| --------- | ---- | ----------- |
257-
| `secret` | string | The resolved secret value |
257+
| `value` | string | The resolved secret value |
258258
| `reference` | string | The original secret reference URI |
259259

260260

apps/sim/app/api/tools/onepassword/create-item/route.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export async function POST(request: NextRequest) {
5454

5555
const parsedFields = params.fields
5656
? (JSON.parse(params.fields) as Array<Record<string, any>>).map((f) => ({
57-
id: f.id || '',
57+
id: f.id || randomUUID().slice(0, 8),
5858
title: f.label || f.title || '',
5959
fieldType: toSdkFieldType(f.type || 'STRING'),
6060
value: f.value || '',

apps/sim/app/api/tools/onepassword/replace-item/route.ts

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -46,37 +46,41 @@ export async function POST(request: NextRequest) {
4646
if (creds.mode === 'service_account') {
4747
const client = await createOnePasswordClient(creds.serviceAccountToken!)
4848

49+
const existing = await client.items.get(params.vaultId, params.itemId)
50+
4951
const sdkItem = {
52+
...existing,
5053
id: params.itemId,
51-
title: itemData.title || '',
52-
category: toSdkCategory(itemData.category || 'LOGIN'),
54+
title: itemData.title || existing.title,
55+
category: itemData.category ? toSdkCategory(itemData.category) : existing.category,
5356
vaultId: params.vaultId,
54-
fields: (itemData.fields ?? []).map((f: Record<string, any>) => ({
55-
id: f.id || '',
56-
title: f.label || f.title || '',
57-
fieldType: toSdkFieldType(f.type || 'STRING'),
58-
value: f.value || '',
59-
sectionId: f.section?.id ?? f.sectionId,
60-
})),
61-
sections: (itemData.sections ?? []).map((s: Record<string, any>) => ({
62-
id: s.id || '',
63-
title: s.label || s.title || '',
64-
})),
65-
notes: itemData.notes || '',
66-
tags: itemData.tags ?? [],
67-
websites: (itemData.urls ?? itemData.websites ?? []).map((u: Record<string, any>) => ({
68-
url: u.href || u.url || '',
69-
label: u.label || '',
70-
autofillBehavior: 'AnywhereOnWebsite' as const,
71-
})),
72-
version: itemData.version ?? 0,
73-
files: [],
74-
createdAt: new Date(),
75-
updatedAt: new Date(),
57+
fields: itemData.fields
58+
? (itemData.fields as Array<Record<string, any>>).map((f) => ({
59+
id: f.id || randomUUID().slice(0, 8),
60+
title: f.label || f.title || '',
61+
fieldType: toSdkFieldType(f.type || 'STRING'),
62+
value: f.value || '',
63+
sectionId: f.section?.id ?? f.sectionId,
64+
}))
65+
: existing.fields,
66+
sections: itemData.sections
67+
? (itemData.sections as Array<Record<string, any>>).map((s) => ({
68+
id: s.id || '',
69+
title: s.label || s.title || '',
70+
}))
71+
: existing.sections,
72+
notes: itemData.notes ?? existing.notes,
73+
tags: itemData.tags ?? existing.tags,
74+
websites:
75+
itemData.urls || itemData.websites
76+
? (itemData.urls ?? itemData.websites ?? []).map((u: Record<string, any>) => ({
77+
url: u.href || u.url || '',
78+
label: u.label || '',
79+
autofillBehavior: 'AnywhereOnWebsite' as const,
80+
}))
81+
: existing.websites,
7682
}
7783

78-
// Cast to any because toSdkCategory/toSdkFieldType return string literals
79-
// that match SDK enum values but TypeScript can't verify this at compile time
8084
const result = await client.items.put(sdkItem as any)
8185
return NextResponse.json(normalizeSdkItem(result))
8286
}

apps/sim/app/api/tools/onepassword/resolve-secret/route.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export async function POST(request: NextRequest) {
4242
const secret = await client.secrets.resolve(params.secretReference)
4343

4444
return NextResponse.json({
45-
secret,
45+
value: secret,
4646
reference: params.secretReference,
4747
})
4848
} catch (error) {

apps/sim/blocks/blocks/onepassword.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ export const OnePasswordBlock: BlockConfig = {
7171
id: 'secretReference',
7272
title: 'Secret Reference',
7373
type: 'short-input',
74-
placeholder: 'op://vault-name/item-name/field-name',
74+
placeholder: 'op://vault-name-or-id/item-name-or-id/field-name',
7575
required: { field: 'operation', value: 'resolve_secret' },
7676
condition: { field: 'operation', value: 'resolve_secret' },
7777
},
@@ -80,6 +80,7 @@ export const OnePasswordBlock: BlockConfig = {
8080
title: 'Vault ID',
8181
type: 'short-input',
8282
placeholder: 'Enter vault UUID',
83+
password: true,
8384
required: {
8485
field: 'operation',
8586
value: [
@@ -154,7 +155,7 @@ export const OnePasswordBlock: BlockConfig = {
154155
},
155156
{
156157
id: 'fields',
157-
title: 'Fields (JSON)',
158+
title: 'Fields',
158159
type: 'code',
159160
placeholder:
160161
'[\n {\n "label": "username",\n "value": "admin",\n "type": "STRING",\n "purpose": "USERNAME"\n }\n]',

apps/sim/lib/workflows/sanitization/references.test.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,13 @@ describe('isLikelyReferenceSegment', () => {
4343
it('should return false when leading content is not comparator characters', () => {
4444
expect(isLikelyReferenceSegment('<foo<bar>')).toBe(false)
4545
})
46+
47+
it('should return true for references starting with a digit', () => {
48+
expect(isLikelyReferenceSegment('<1password1>')).toBe(true)
49+
expect(isLikelyReferenceSegment('<1password1.secret>')).toBe(true)
50+
})
51+
52+
it('should return false for purely numeric references', () => {
53+
expect(isLikelyReferenceSegment('<123>')).toBe(false)
54+
})
4655
})

apps/sim/lib/workflows/sanitization/references.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ export function isLikelyReferenceSegment(segment: string): boolean {
7070
if (INVALID_REFERENCE_CHARS.test(beforeDot) || INVALID_REFERENCE_CHARS.test(afterDot)) {
7171
return false
7272
}
73-
} else if (INVALID_REFERENCE_CHARS.test(inner) || inner.match(/^\d/) || inner.match(/\s\d/)) {
73+
} else if (INVALID_REFERENCE_CHARS.test(inner) || inner.match(/^\d+$/) || inner.match(/\s\d/)) {
7474
return false
7575
}
7676

apps/sim/tools/onepassword/resolve_secret.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,19 +49,19 @@ export const resolveSecretTool: ToolConfig<
4949
transformResponse: async (response) => {
5050
const data = await response.json()
5151
if (data.error) {
52-
return { success: false, output: { secret: '', reference: '' }, error: data.error }
52+
return { success: false, output: { value: '', reference: '' }, error: data.error }
5353
}
5454
return {
5555
success: true,
5656
output: {
57-
secret: data.secret ?? '',
57+
value: data.value ?? '',
5858
reference: data.reference ?? '',
5959
},
6060
}
6161
},
6262

6363
outputs: {
64-
secret: { type: 'string', description: 'The resolved secret value' },
64+
value: { type: 'string', description: 'The resolved secret value' },
6565
reference: { type: 'string', description: 'The original secret reference URI' },
6666
},
6767
}

apps/sim/tools/onepassword/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ export interface OnePasswordDeleteItemResponse extends ToolResponse {
153153

154154
export interface OnePasswordResolveSecretResponse extends ToolResponse {
155155
output: {
156-
secret: string
156+
value: string
157157
reference: string
158158
}
159159
}

0 commit comments

Comments
 (0)